200 votes

Conversion année/mois/jour en jour de l'année en Python

J'utilise le datetime module, 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 en tenant compte des années bissextiles. Par exemple, aujourd'hui (6 mars 2009) est le 65e jour de 2009.

Je vois deux options :

  1. Créer un number_of_days_in_month = [31, 28, ...] array, décider si c'est une année bissextile et additionner manuellement les jours.

  2. Utilisez datetime.timedelta pour faire une supposition et ensuite 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)

Ces deux méthodes sont plutôt maladroites et j'ai l'impression qu'il existe une méthode plus "pythonique" pour calculer le jour de l'année. Des idées/suggestions ?

5voto

zweiterlinde Points 5984

Il suffit de soustraire le 1er janvier de la date :

import datetime
today = datetime.datetime.now()
day_of_year = (today - datetime.datetime(today.year, 1, 1)).days + 1

2 votes

D.toordinal() - date(d.year, 1, 1).toordinal() + 1 est plus standard selon la documentation. Elle est équivalente à la réponse acceptée sans produire le tuple de temps entier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X