Eu tenho um cronograma. Quero os dias, horas e minutos a partir disso - seja como tupla ou como dicionário ... não estou preocupado.
Eu devo ter feito isso uma dúzia de vezes em uma dúzia de idiomas ao longo dos anos, mas o Python geralmente tem uma resposta simples para tudo, então pensei em perguntar aqui antes de rebentar algumas matemáticas nauseantes simples (ainda que detalhadas).
O Sr. Fooz levanta uma boa questão.
Estou lidando com "listagens" (um pouco como listagens do ebay), nas quais cada uma tem uma duração. Estou tentando encontrar o tempo restante fazendowhen_added + duration - now
Estou certo ao dizer que não seria responsável pelo horário de verão? Caso contrário, qual é a maneira mais simples de adicionar / subtrair uma hora?
timedelta
objeto "datetime.timedelta (segundos = 1177)" : use str ()Respostas:
Se você tem um
datetime.timedelta
valortd
,td.days
já fornece os "dias" que deseja.timedelta
os valores mantêm a fração do dia como segundos (não diretamente horas ou minutos), portanto você terá que executar "matemática simples nauseante simples", por exemplo:fonte
td
é negativo,-1 // 3600
é-1
.//
é usado em vez de/
obter um número inteiro, não um número flutuante.//
é um operador de divisão de piso: "divisão que resulta em um número inteiro ajustado à esquerda na linha de números", veja aqui .jcrs
apontado,-1//3600
é-1
, então por que não usarint(td.seconds/3600)
para transformar o-1
segundo em0
horas em vez de1
horas para trás?days, hours, minutes = x.days, x.seconds // 3600, x.seconds %3600//60
e entãoseconds = x.seconds - hours*3600 - minutes*60
Isso é um pouco mais compacto, você obtém as horas, minutos e segundos em duas linhas.
fonte
td.days
for diferente de zero. Você precisahours += td.days*24
. Se você deseja levar em consideração frações de segundo (OP não);seconds += td.microseconds / 1e6
poderia ser usado.Quanto ao horário de verão, acho que a melhor coisa é converter os dois
datetime
objetos em segundos. Dessa forma, o sistema calcula o horário de verão para você.fonte
mktime()
pode falhar se o fuso horário local puder ter um deslocamento de utc diferente em momentos diferentes (muitos têm) - você pode usar opytz
módulo para obter acesso ao banco de dados tz de uma maneira portadora de uma característica não-portátil. Além disso, a hora local pode ser ambígua (50% de chances de erro) - você precisa de algumas informações adicionais para desambiguar, por exemplo, muitas vezes (nem sempre) as datas em um arquivo de log são monótonas . Consulte Como posso subtrair um dia de uma data python? que pode ter que lidar com problemas semelhantes.Eu não entendo
que tal agora
Você recebe minutos e segundos de um minuto como um flutuador.
fonte
Eu usei o seguinte:
fonte
timedeltas tem um atributo
days
eseconds
.. você pode convertê-los com facilidade.fonte