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.


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)

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)


15

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


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)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.