788 votes

Comment calculer le nombre de jours entre deux dates données

Si j'ai deux dates (ex. '8/18/2008' et '9/26/2008'), quelle est la meilleure façon d'obtenir le nombre de jours entre ces deux dates?

1218voto

Dana Points 9876

Si vous avez deux objets de date, vous pouvez simplement les soustraire, ce qui calcule un objet timedelta.

from datetime import date

d0 = date(2008, 8, 18)
d1 = date(2008, 9, 26)
delta = d1 - d0
print(delta.days)

La section pertinente de la documentation: https://docs.python.org/library/datetime.html.

Voir cette réponse pour un autre exemple.

4 votes

De superbes réponses ici. Comme beaucoup de personnes pourraient utiliser le cadre de données pandas, j'ai pensé qu'il pourrait être utile de consulter le lien sur la façon de convertir de np.datetime64 à python datetime stackoverflow.com/questions/52982056/…

2 votes

La bonne chose est que cette solution retourne également un delta correct pour les années bissextiles.

1 votes

C'est pourquoi j'aime Python - des choses comme ça, qui font qu'un problème technique complexe se sent résolu de manière naturelle

241voto

dguaraglia Points 3113

En utilisant la puissance de datetime :

de datetime import datetime
format_date = "%m/%d/%Y"

a = datetime.strptime('8/18/2008', format_date)
b = datetime.strptime('9/26/2008', format_date)

delta = b - a

print(delta.days)

# c'est ainsi que l'on calcule le nombre de jours entre deux dates données

5 votes

En réalité, la classe de date serait plus appropriée dans ce cas que la classe datetime.

18 votes

@JeremyCantrell Et pourtant, même huit ans plus tard, date manque toujours de son équivalent à strptime().

0 votes

Pourquoi strptime a-t-il besoin de l'argument format? Devrait être clair avec la date du premier argument qui a un format.

64voto

Harley Holcombe Points 34618

Jours jusqu'à Noël :

>>> import datetime
>>> today = datetime.date.today()
>>> someday = datetime.date(2008, 12, 25)
>>> diff = someday - today
>>> diff.days
86

Plus d'arithmétique ici.

7 votes

Réponse mise à jour : -4602

24voto

kolrie Points 3496

Vous voulez le module datetime.

>>> from datetime import datetime 
>>> datetime(2008,08,18) - datetime(2008,09,26) 
datetime.timedelta(4) 

Un autre exemple:

>>> import datetime 
>>> today = datetime.date.today() 
>>> print(today)
2008-09-01 
>>> last_year = datetime.date(2007, 9, 1) 
>>> print(today - last_year)
366 days, 0:00:00 

Comme indiqué ici

2 votes

Comment puis-je obtenir ceci sans la partie 0:00:00 ?

3 votes

@VickiB delta = aujourd'hui - l'année dernière print(delta.days)

1 votes

Notez l'ordre de calcul : from_earlier_time - to_later_time, alors vous obtenez un timedelta positif ! Pas l'inverse. Un peu étrange.

18voto

de datetime import datetime
start_date = datetime.strptime('8/18/2008', "%m/%d/%Y")
end_date = datetime.strptime('9/26/2008', "%m/%d/%Y")
print abs((end_date-start_date).days)

2 votes

Cela n'apporte rien de nouveau par rapport aux réponses données il y a 4 ans. -1.

3 votes

+1 pour l'utilisation de abs(), qui est utile lorsque les dates comparées sont inconnues à l'avance et que la différence vous intéresse. Si votre deuxième date dans datetime.strptime(date, date) est postérieure à la première date, le résultat sera négatif. abs() rend toutes les entrées absolues (c'est-à-dire positives).

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