Rechercher l'objet datetime le plus ancien / le plus récent dans une liste


93

J'ai une liste d'objets datetime, et je veux trouver le plus ancien ou le plus jeune. Certaines de ces dates pourraient être dans le futur.

from datetime import datetime

datetime_list = [
    datetime(2009, 10, 12, 10, 10),
    datetime(2010, 10, 12, 10, 10),
    datetime(2010, 10, 12, 10, 10),
    datetime(2011, 10, 12, 10, 10), #future
    datetime(2012, 10, 12, 10, 10), #future
]

Quelle est la manière la plus optimale de le faire? Je pensais comparer datetime.now () à chacun d'entre eux.


6
Que diriez - vous maxet min?
JoshD

9
Il n'y avait pas de question similaire sur stackoverflow, j'ai cherché une réponse, donc je suis sûr qu'elle sera utile aux autres.
panosl

Réponses:


129

Le plus ancien:

oldest = min(datetimes)

Le plus jeune avant maintenant:

now = datetime.datetime.now(pytz.utc)
youngest = max(dt for dt in datetimes if dt < now)

Vous voulez dire le plus vieux? ( Oldest before now)
Bulgantamir

Dans Python 3, je pense que c'est défectueux. Si je donne ce tableau ["April2020", "March2020"], min me donnera "April2020" comme si min donnera le plus récent. Cependant, si je le donne ["avril2020", "janvier2021", "mars2020"], min me donnera "avril2020". Je suis presque sûr que min donnera la date alphabétique la plus basse qui n'est pas nécessairement la date la plus récente.
ScottyBlades

1
@ScottyBlades c'est parce que dans votre exemple, vos valeurs sont des chaînes (qui représentent une date, mais ne sont pas réellement des datevaleurs), donc elles ne peuvent vraiment être comparées que par ordre alphabétique. Si vous aviez à la place un tableau de valeurs dateou datetime, elles seraient comparées correctement.
Jordanie

30

Compte tenu d'une liste de dates dates:

La date maximale est max(dates)

La date minimale est min(dates)


15

Les datetimes sont comparables; afin que vous puissiez utiliser max(datetimes_list)etmin(datetimes_list)


6

avez-vous essayé ceci:

>>> from datetime import datetime as DT
>>> l =[]
>>> l.append(DT(1988,12,12))
>>> l.append(DT(1979,12,12))
>>> l.append(DT(1979,12,11))
>>> l.append(DT(2011,12,11))
>>> l.append(DT(2022,12,11))
>>> min(l)
datetime.datetime(1979, 12, 11, 0, 0)
>>> max(l)
datetime.datetime(2022, 12, 11, 0, 0)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.