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.


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)

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)


14

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


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)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.