在列表中查找最早/最晚的日期时间对象

136

我有一个日期时间对象的列表,想要找出最旧的或最年轻的日期。这些日期中可能会有一些在未来。

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() 与每一个日期进行比较。


7
maxmin 怎么样? - JoshD
9
在stackoverflow上没有类似的问题,我已经搜索过答案了,所以我相信这对其他人也会有用。 - panosl
5个回答

180

最古老的:

oldest = min(datetimes)

现在之前最年轻的:

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

你的意思是最老的吗?(指现在之前的最老的) - Bulgantamir
在Python 3中,我认为这是有缺陷的。如果我给出这个数组["April2020", "March2020"],min会给我"April2020",好像min会给出最近的日期。然而,如果我给它["April2020", "January2021", "March2020"],min会给我"April2020"。我很确定min会给出字母顺序最低的日期,这不一定是最近的日期。 - ScottyBlades
3
@ScottyBlades,这是因为在您的例子中,您的值是字符串(它们恰好表示日期,但实际上不是“日期”值),因此它们只能按字母顺序进行比较。如果您有一个datedatetime值的数组,它们将被正确比较。 - Jordan

42

给定一个日期列表dates:

最大日期为max(dates)

最小日期为min(dates)


19

日期时间可以进行比较,因此您可以使用max(datetimes_list)min(datetimes_list)


8

你尝试过这个吗:

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

-2

6
根据这些文档,datetime.min() 返回的是可表示的最小日期时间,而不是日期时间列表中的最小值。 - Daan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接