J'utilise le module datetime Python , c'est-à-dire:
>>> import datetime
>>> today = datetime.datetime.now()
>>> print today
2009-03-06 13:24:58.857946
et je voudrais calculer le jour de l'année qui est sensible aux années bissextiles. Par exemple, aujourd'hui (6 mars 2009) est le 65e jour de 2009. Voici la calculatrice DateTime basée sur le Web .
Quoi qu'il en soit, je vois deux options:
A. Créez un tableau number_of_days_in_month = [31, 28, ...], décidez si c'est une année bissextile, additionnez manuellement les jours.
B. Utilisez datetime.timedelta
pour faire une estimation puis une recherche binaire pour le jour correct de l'année:
>>> import datetime
>>> YEAR = 2009
>>> DAY_OF_YEAR = 62
>>> d = datetime.date(YEAR, 1, 1) + datetime.timedelta(DAY_OF_YEAR - 1)
Celles-ci sont toutes les deux assez maladroites et j'ai le sentiment instinctif qu'il existe une manière plus "pythonique" de calculer le jour de l'année. Des idées / suggestions?
date.today()
plutôt quedatetime.now()
fonctionne aussi et souligne un peu plus la nature de l'opération.time.localtime().tm_yday
pas besoin de convertir un datetime en un multiplicateur de temps puisque c'est ce que produit localtime ().Ne pourriez-vous pas utiliser
strftime
?Éditer
Comme indiqué dans les commentaires, si vous souhaitez effectuer des comparaisons ou des calculs avec ce nombre, vous devrez le convertir en
int()
carstrftime()
renvoie une chaîne. Si tel est le cas, il vaut mieux utiliser la réponse de DzinX .la source
La réponse de DZinX est une excellente réponse à la question. J'ai trouvé cette question en cherchant la fonction inverse. J'ai trouvé que cela fonctionnait:
Je ne suis pas sûr de l'étiquette ici, mais j'ai pensé qu'un pointeur vers la fonction inverse pourrait être utile pour d'autres comme moi.
la source
Je souhaite présenter les performances de différentes approches, sur Python 3.4, Linux x64. Extrait du profileur de ligne:
Le plus efficace est donc
la source
Il suffit de soustraire le 1er janvier de la date:
la source
Si vous avez des raisons d'éviter l'utilisation du
datetime
module, ces fonctions fonctionneront.la source
Ce code prend une date comme argument d'entrée et renvoie le jour de l'année.
la source