Listedeki en eski / en genç datetime nesnesini bulun


94

Datetime nesnelerinin bir listesi var ve en eski veya en genç olanı bulmak istiyorum. Bu tarihlerden bazıları gelecekte olabilir.

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
]

Bunu yapmanın en uygun yolu nedir? Datetime.now () ile bunların her birini karşılaştırmayı düşünüyordum.


6
Peki ya maxve min?
JoshD

9
Stackoverflow'da benzer bir soru yoktu, bir cevap için arama yaptım, bu yüzden başkaları için faydalı olacağından eminim.
panosl

Yanıtlar:


129

En eski:

oldest = min(datetimes)

Şimdiye kadarki en genç:

now = datetime.datetime.now(pytz.utc)
youngest = max(dt for dt in datetimes if dt < now)

En eski mi demek istiyorsun? ( Oldest before now)
Bulgantamir

Python 3'te bunun kusurlu olduğunu düşünüyorum. Bu diziyi ["April2020", "March2020"] verirsem, min bana "April2020" yi min en yeniyi verecekmiş gibi verir. Ancak ["Nisan2020", "Ocak2021", "Mart2020"] verirsem min "Nisan2020" değerini verir. Min'in alfabetik olarak en düşük olanı vereceğinden oldukça eminim ki bu en yakın tarih olmayabilir.
ScottyBlades

1
@ScottyBlades, bunun nedeni, örneğinizde değerleriniz dizelerdir (bunlar bir tarihi temsil eder, ancak gerçekte datedeğerler değildir ), bu nedenle yalnızca alfabetik olarak karşılaştırılabilir. Bunun yerine bir dizi dateveya datetimedeğeriniz varsa, bunlar doğru şekilde karşılaştırılır.
Ürdün

30

Tarih listesi verildiğinde dates:

Maksimum tarih max(dates)

Minimum tarih min(dates)


15

Veri zamanları karşılaştırılabilir; böylece kullanabilirsin max(datetimes_list)vemin(datetimes_list)


6

bunu denedin mi:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.