在列表中查找最旧/最年轻的日期时间对象


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

9
在stackoverflow上没有任何类似的问题,我确实搜索了一个答案,所以我确信它对其他人将是有用的。
panosl

Answers:


129

最老的:

oldest = min(datetimes)

现在最年轻:

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

你是说最老的?(Oldest before now
Bulgantamir,

在Python 3中,我认为这是有缺陷的。如果我给这个数组[“ April2020”,“ March2020”],min会给我“ April2020”,就好像min会给出最新的一样。但是,如果我给它[“ April2020”,“ January2021”,“ March2020”],则最小值会给我“ April2020”。我很确定min将给出字母顺序的最小值,不一定是最近的日期。
ScottyBlades

1
@ScottyBlades,因为在您的示例中,您的值是字符串(碰巧代表一个日期,但实际上不是date值),因此只能按字母顺序对它们进行比较。如果您改为包含datedatetime值的数组,则可以正确比较它们。
约旦

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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.