从日期时间列表中获取最早和最晚的时间

6

我有,

timestamp=[]
for x in model_obj:
     timestamp.append(x.start_time)

print timestamp

结果:

[datetime.datetime(2014, 9, 2, 19, 40, 1, tzinfo=<UTC>), datetime.datetime(2014, 9, 2, 19, 40, 14, tzinfo=<UTC>), datetime.datetime(2014, 9, 2, 19, 40, 7, tzinfo=<UTC>), datetime.datetime(2014, 9, 2, 21, 53, tzinfo=<UTC>), datetime.datetime(2014, 9, 2, 22, 25, 24, tzinfo=<UTC>), datetime.datetime(2014, 9, 2, 22, 2
5, 52, tzinfo=<UTC>)]

我的问题是:如何在Python中从这个日期时间列表中获取最早和最晚的时间?
1个回答

11

使用内置的min()/max()函数:

earliest = min(timestamp)
latest = max(timestamp)

顺便提一下,我建议您使用列表推导式来构建列表:

timestamp = [x.start_time for x in model_obj]

更新:最早可以表示的datetime0001-01-01 00:00:00,所以据我所知,无法从数据库加载0000-00-00日期,你将在x.Date_Time_End字段中得到None

问题是:你的任务是否允许忽略这个日期?如果是,则只需从列表中过滤出None值:

end = [x.Date_Time_End for model2_obj if x.Date_Time_End]
end_time = max(end)

如果我需要从日期列表中获取最小值和最大值,例如 timestamp = [0000-00-00 00:00:00, 2014-09-01 05:03:56, 2014-09-01 06:25:05],该怎么办? - BLACK PANTHER
如果日期格式为YYYY-MM-DD,那么相同的min()/max()函数将正常工作。如果日期格式为YYYY-DD-MM,则必须向这些函数添加key参数:https://docs.python.org/2/library/functions.html#min - catavaran
所有日期都是以YYYY-MM-DD格式表示。每当出现日期0000-00-00 00:00:00时,最大值会给我一个空值作为结果。即使列表中有有效的日期,请帮助我解决这个问题。 - BLACK PANTHER
end = [] for x in model2_obj: end.append(x.Date_Time_End) end_time = max(pdb_end) 但是它返回一个错误 "TypeError: can't compare datetime.datetime to NoneType" - BLACK PANTHER

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