É porque a jornada de trabalho é uma duração, não uma data, então tem que usar timedelta
em vez de date
/datetime
.
O chato é que não tem um método pronto como strptime
para timedelta
, então tem que fazer na mão. Algo como:
# essa parte não muda
from datetime import datetime, timedelta
inicio = input('Informe o horário de entrada: ')
ini = datetime.strptime(inicio, "%H:%M:%S")
said_alm = input('Informe o horário de saída para o almoço: ')
sa = datetime.strptime(said_alm, "%H:%M:%S")
parte1 = sa - ini
print('Total de horas da 1ª parte do dia: {}'.format(parte1))
volt_alm = input('\nInforme o horario de volta do almoço: ')
va = datetime.strptime(volt_alm, "%H:%M:%S")
saida = input('Informe o horário de saída: ')
sd = datetime.strptime(saida, "%H:%M:%S")
parte2 = sd - va
print('Total de horas da 2ª parte do dia: {}'.format(parte2))
total = (parte2 + parte1)
print('\nTotal de horas trabalhadas no dia: {}'.format(total))
###################
# jornada de trabalho
jornada_digitada = '09:00:00' # input(etc) - suponha que o usuário digitou isso
horas, minutos, segundos = map(int, jornada_digitada.split(':'))
jornada = timedelta(hours=horas, minutes=minutos, seconds=segundos)
# agora é só subtrair
print(jornada - total)
Só pra ser mais claro, existem dois conceitos importantes: datas/horas e durações.
- uma data representa um ponto específico do calendário e um horário representa um momento específico do dia. Ex: a reunião será dia 10/01/2023 às duas horas da tarde (diz exatamente em quando será a reunião)
- uma duração representa uma quantidade de tempo. Ex: a reunião durou duas horas (eu não disse que dia/hora ela começou ou terminou, só disse quanto tempo ela durou)
O que pode confundir é que tanto horários quanto durações usam as mesmas palavras (horas, minutos e segundos), e muitas vezes são escritos do mesmo jeito (“11:00” pode ser tanto 11 da manhã quanto uma duração de 11 horas). Mas cada um representa um conceito diferente.
Em Python, datas e horas são representadas por date
(somente data), datetime
(data e hora) e time
(somente hora), e durações são representadas por um timedelta
.
Se vc subtrai duas datas, o resultado é um timedelta
(a quantidade de tempo entre essas datas - ex: a diferença entre 10h00 e 11h30 é de 1 hora de 30 minutos).
Se vc soma ou subtrai um timedelta
de uma data, o resultado é outra data (ex: 10h00 mais duas horas é igual a 12h00).
E se vc subtrai dois timedeltas
, o resultado é outro timedelta
(que é o que foi feito para a jornada - ex: uma duração de 9 horas menos uma duração de 8 horas é igual a uma duração de 1 hora).
Sabendo disso, basta usar os tipos corretos para cada situação.