Estoy usando el módulo de fecha y hora de Python , es decir:
>>> import datetime
>>> today = datetime.datetime.now()
>>> print today
2009-03-06 13:24:58.857946
y me gustaría calcular el día del año sensible a los años bisiestos. por ejemplo, hoy (6 de marzo de 2009) es el día 65 de 2009. Aquí está la calculadora de fecha y hora basada en la web .
De todos modos, veo dos opciones:
A. Cree una matriz number_of_days_in_month = [31, 28, ...], decida si es un año bisiesto, resuma manualmente los días.
B. Use datetime.timedelta
para adivinar y luego busque binariamente el día correcto del año:
>>> import datetime
>>> YEAR = 2009
>>> DAY_OF_YEAR = 62
>>> d = datetime.date(YEAR, 1, 1) + datetime.timedelta(DAY_OF_YEAR - 1)
Ambos se sienten bastante torpes y tengo el presentimiento de que hay una forma más "pitónica" de calcular el día del año. ¿Alguna idea / sugerencia?
date.today()
lugar dedatetime.now()
también funciona y enfatiza un poco más la naturaleza de la operación.time.localtime().tm_yday
no es necesario convertir una fecha y hora en una timetuple, ya que eso es lo que produce localtime ().¿No podrías usar
strftime
?Editar
Como se señaló en los comentarios, si desea hacer comparaciones o cálculos con este número, deberá convertirlo a
int()
porquestrftime()
devuelve una cadena. Si ese es el caso, es mejor usar la respuesta de DzinX .fuente
La respuesta de DZinX es una gran respuesta para la pregunta. Encontré esta pregunta mientras buscaba la función inversa. Encontré esto para trabajar:
No estoy seguro de la etiqueta por aquí, pero pensé que un puntero a la función inversa podría ser útil para otros como yo.
fuente
Quiero presentar el rendimiento de diferentes enfoques, en Python 3.4, Linux x64. Extracto del perfilador de línea:
Entonces lo más eficiente es
fuente
Solo resta el 1 de enero de la fecha:
fuente
Si tiene motivos para evitar el uso del
datetime
módulo, estas funciones funcionarán.fuente
Este código toma una fecha como argumento de entrada y devuelve el día del año.
fuente