Estou usando o módulo datetime do Python , ou seja:
>>> import datetime
>>> today = datetime.datetime.now()
>>> print today
2009-03-06 13:24:58.857946
e gostaria de calcular o dia do ano sensível aos anos bissextos. por exemplo, hoje (6 de março de 2009) é o 65º dia de 2009. Aqui está a calculadora DateTime baseada na Web .
Enfim, vejo duas opções:
A. Crie um número_de_dias_em_month array = [31, 28, ...], decida se é um ano bissexto, resuma manualmente os dias.
B. Use datetime.timedelta
para fazer um palpite e, em seguida, pesquisa binária para o dia correto do ano:
>>> import datetime
>>> YEAR = 2009
>>> DAY_OF_YEAR = 62
>>> d = datetime.date(YEAR, 1, 1) + datetime.timedelta(DAY_OF_YEAR - 1)
Ambos parecem muito desajeitados e eu sinto que há uma maneira mais "pitônica" de calcular o dia do ano. Alguma idéia / sugestão?
date.today()
ao invés dedatetime.now()
também funciona e enfatiza a natureza da operação um pouco mais.time.localtime().tm_yday
há necessidade de converter uma data e hora em um horário, pois é o que localtime () gera.Você não poderia usar
strftime
?Editar
Conforme observado nos comentários, se você deseja fazer comparações ou cálculos com esse número, precisará convertê-lo para,
int()
porquestrftime()
retorna uma string. Se for esse o caso, é melhor usar a resposta do DzinX .fonte
A resposta do DZinX é uma ótima resposta para a pergunta. Encontrei essa pergunta enquanto procurava a função inversa. Eu achei que isso funcionava:
Não tenho certeza da etiqueta por aqui, mas achei que um ponteiro para a função inversa poderia ser útil para outras pessoas como eu.
fonte
Quero apresentar o desempenho de diferentes abordagens, no Python 3.4, Linux x64. Trecho do criador de perfil de linha:
Então, o mais eficiente é
fonte
Apenas subtraia 1 de janeiro da data:
fonte
Se você tiver motivos para evitar o uso do
datetime
módulo, essas funções funcionarão.fonte
Este código assume uma data como argumento de entrada e retorna o dia do ano.
fonte