Suchen Sie das älteste / jüngste datetime-Objekt in einer Liste

87

Ich habe eine Liste von Datetime-Objekten und möchte das älteste oder jüngste finden. Einige dieser Daten könnten in der Zukunft liegen.

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
]

Was ist der optimalste Weg, dies zu tun? Ich dachte daran, datetime.now () mit jedem von diesen zu vergleichen.

panosl
quelle
6
Wie wäre es mit maxund min?
JoshD
9
Es gab keine ähnliche Frage zu Stackoverflow. Ich habe nach einer Antwort gesucht, daher bin ich sicher, dass sie für andere nützlich sein wird.
Panosl

Antworten:

126

Älteste:

oldest = min(datetimes)

Jüngste bisher:

now = datetime.datetime.now(pytz.utc)
youngest = max(dt for dt in datetimes if dt < now)
Eumiro
quelle
Du meinst älteste? ( Oldest before now)
Bulgantamir
In Python 3 denke ich, dass dies fehlerhaft ist. Wenn ich dieses Array ["April2020", "March2020"] gebe, gibt min mir "April2020", als würde min das aktuellste geben. Wenn ich es jedoch gebe ["April2020", "Januar2021", "März2020"], gibt min mir "April2020". Ich bin mir ziemlich sicher, dass min das alphabetische Tief gibt, was nicht unbedingt das aktuellste Datum ist.
ScottyBlades
1
@ScottyBlades Das liegt daran, dass Ihre Werte in Ihrem Beispiel Zeichenfolgen sind (die zufällig ein Datum darstellen, aber keine tatsächlichen dateWerte sind), sodass sie nur wirklich alphabetisch verglichen werden können. Wenn Sie stattdessen ein Array von dateoder datetimeWerten hätten, würden diese korrekt verglichen.
Jordanien
30

Gegeben eine Liste von Daten dates:

Maximales Datum ist max(dates)

Mindestdatum ist min(dates)

JoshD
quelle
14

Datenzeiten sind vergleichbar; so können Sie max(datetimes_list)und verwendenmin(datetimes_list)

Gabi Purcaru
quelle
6

Hast du das versucht:

>>> 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
quelle