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.

panosl
la source
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)
eumiro
la source
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)

JoshD
la source
15

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

Gabi Purcaru
la source
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)
jknair
la source