リスト内で最も古い/最も若い日時オブジェクトを検索します


93

日時オブジェクトのリストがあり、最も古いオブジェクトまたは最も若いオブジェクトを見つけたいと思います。これらの日付のいくつかは将来の可能性があります。

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
]

そうするための最も最適な方法は何ですか?私はdatetime.now()をそれらのそれぞれと比較することを考えていました。


6
どの程度maxmin
JoshD 2010年

9
stackoverflowに同様の質問はありませんでした。私は答えを探しましたので、他の人にも役立つと確信しています。
panosl 2010年

回答:


129

最も古い:

oldest = min(datetimes)

今までで最年少:

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

あなたは最も古いという意味ですか?(Oldest before now
ブルガンタミール2018年

Python 3では、これには欠陥があると思います。この配列["April2020"、 "March2020"]を指定すると、minは、minが最新のものを提供するかのように、 "April2020"を提供します。ただし、["April2020"、 "January2021"、 "March2020"]とすると、minは "April2020"を返します。minは、必ずしも最新の日付ではないアルファベット順の最低値を示すと確信しています。
ScottyBlades

1
@ScottyBladesは、あなたの例では値が文字列(たまたま日付を表しているが、実際にはdate値ではない)であるため、実際にはアルファベット順にしか比較できないためです。代わりにdateまたはdatetime値の配列がある場合、それらは正しく比較されます。
ヨルダン

30

日付のリストが与えられたdates

最大日付は max(dates)

最小日付は min(dates)



6

あなたはこれを試しましたか:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.