How to calculate 'end time' in Python?

0
qpd = int(input('Quantidade produzida: '))  # qpd = Quantidade Produzida
qpg = int(input('Quantidade programada: '))  # qpg = Quantidade Programada
qrs = qpg - qpd  # qrs = Quantidade Restante
qpc = qrs / 550  # qpc = Quantidade por Carro
mrs = int(qpc * 18)  # mrs = Minutos Restantes
if mrs > 60:
    hora = mrs // 60  # hora = Horas até o término da solução
    minuto = mrs % 60  # minuto = Minuto até o término da solução
    print(f'Faltam, aproximadamente, {hora} horas e {minuto} minutos para'
          ' o término da solução.')
else:
    print(f'Faltam, aproximadamente, {mrs} minutos para'
          ' o término da solução.')

I am a beginner in Python and am creating a code that calculates the end time of a process. The code is still very simple because my knowledge is still very limited.

I want my code to calculate what time the process will be finalized, but I still do not know how. For now, I only know how many hours and minutes are left for the end of the process. I did some research and found the module datetime , but I could not find information to help me with this problem.

    
asked by anonymous 15.09.2018 / 01:58

1 answer

2

Hello, welcome!

The datetime library is really a good solution for working with dates and times. For example, in the form below we can define the current date and time:

import datetime as dt

print(dt.datetime.now())
datetime.datetime(2018, 9, 15, 3, 21, 1, 529738)

In the above result we have the function now() which returns the current time in an own structure datetime storing, respectively, the year, month, day, hour, minute, second and microsecond.

Another interesting feature of this library is the ease of doing operations with schedules using dt.timedelta() . Example:

agora = dt.datetime.now();
daqui_um_segundo = agora + dt.timedelta(seconds = 1);
daqui_um_minuto = agora + dt.timedelta(minutes = 1);
daqui_uma_hora = agora + dt.timedelta(hours = 1);
datetime.datetime(2018, 9, 15, 3, 27, 29, 524590)
datetime.datetime(2018, 9, 15, 3, 27, 30, 524590)
datetime.datetime(2018, 9, 15, 3, 28, 29, 524590)
datetime.datetime(2018, 9, 15, 4, 27, 29, 524590)

For better visualization you can use the strftime function to format the time display:

agora1 = agora.strftime("%Y-%m-%d %H:%M:%S")
agora2 = agora.strftime("%H:%M:%S")
agora3 = agora.strftime("%H:%M")

print(agora1)
print(agora2)
print(agora3)
2018-09-15 03:27:29
03:27:29
03:27

Notice that the strftime function receives a parameter that determines the format of the desired date and time, where each letter corresponds to some element. %H is time, %Y is year, and so on. The other characters outside the identifiers are optional.

Knowing this information you can set the future time based on a time interval. In your case you have the minutes and the hours for the process. Only the minutes are enough using the resources already mentioned. See:

qpd = int(input('Quantidade produzida: '))  # qpd = Quantidade Produzida
qpg = int(input('Quantidade programada: '))  # qpg = Quantidade Programada
qrs = qpg - qpd  # qrs = Quantidade Restante
qpc = qrs / 550  # qpc = Quantidade por Carro
mrs = int(qpc * 18)  # mrs = Minutos Restantes
if mrs > 60:
    hora = mrs // 60  # hora = Horas até o término da solução
    minuto = mrs % 60  # minuto = Minuto até o término da solução
    print(f'Faltam, aproximadamente, {hora} horas e {minuto} minutos para'
          ' o término da solução.')
else:
    print(f'Faltam, aproximadamente, {mrs} minutos para'
          ' o término da solução.')

hora_atual = dt.datetime.now()
hora_final = hora_atual + dt.timedelta(minutes = mrs)

hora_atual = hora_atual.strftime("%H:%M")
hora_final = hora_final.strftime("%H:%M")
print(f"A hora atual é {hora_atual}")
print(f"O horário final do processo é {hora_final}")
Quantidade produzida: 45
Quantidade programada: 567
Faltam, aproximadamente, 17 minutos para o término da solução.
A hora atual é 03:45
O horário final do processo é 04:02
    
15.09.2018 / 08:48