Temukan objek datetime tertua / termuda dalam daftar

94

Saya punya daftar objek datetime, dan saya ingin mencari yang tertua atau termuda. Beberapa dari tanggal ini mungkin di masa mendatang.

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
]

Apa cara paling optimal untuk melakukannya? Saya sedang berpikir untuk membandingkan datetime.now () dengan masing-masing.

panosl
sumber
6
Bagaimana dengan maxdan min?
JoshD
9
Tidak ada pertanyaan serupa di stackoverflow, saya memang mencari jawabannya, jadi saya yakin ini akan berguna bagi orang lain.
panosl

Jawaban:

129

Tertua:

oldest = min(datetimes)

Yang termuda sebelum sekarang:

now = datetime.datetime.now(pytz.utc)
youngest = max(dt for dt in datetimes if dt < now)
eumiro
sumber
Maksudmu tertua? ( Oldest before now)
Bulgantamir
Di Python 3, saya pikir ini cacat. Jika saya memberikan array ini ["April2020", "March2020"], min akan memberi saya "April2020" seolah-olah min akan memberikan yang terbaru. Namun, jika saya memberikannya ["April2020", "Januari2021", "Maret2020"], min akan memberi saya "April2020". Saya cukup yakin min akan memberikan angka terendah menurut abjad yang belum tentu merupakan tanggal terbaru.
ScottyBlades
1
@ScottyBlades itu karena dalam contoh Anda, nilai Anda adalah string (yang kebetulan mewakili tanggal, tetapi sebenarnya bukan datenilai), jadi nilai tersebut hanya dapat dibandingkan secara alfabetis. Jika Anda malah memiliki larik dateatau datetimenilai, mereka akan dibandingkan dengan benar.
Jordan
30

Diberikan daftar tanggal dates:

Tanggal maksimum adalah max(dates)

Tanggal min adalah min(dates)

JoshD
sumber
15

Waktu data sebanding; sehingga Anda dapat menggunakan max(datetimes_list)danmin(datetimes_list)

Gabi Purcaru
sumber
6

sudahkah kamu mencoba ini:

>>> 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.dll
sumber