如何在Python中解析DST日期?

时间:2013-05-22 19:44:42

标签: python python-2.7

我的字典中有一个日期字段Mon Apr 25 13:32:00 PDT 2013我想按日期字段排序我的项目列表。

dictionarylist.sort(key=operator(fieldposition)无效。有什么帮助吗?

我想保留时间字段吗?

示例数据(来自评论):

{
    '11163722404385': [
        ('#3', 'Biology', 'A', 'Mon Apr 22 13:32:00 PDT 2013'),
        ('#3', '2089','Irdu', 'B', 'Wed Apr 10 15:31:00 PDT 2013')
    ], 
    '1116372240485': [
        ('#3', '2089','Biology', 'C', 'Mon Apr 25 13:32:00 PDT 2013'),
        ('#3', '2089', 'Math', 'A', 'Mon Apr 22 13:31:14 PDT 2013'),
        ('#3', '2089', 'Literature','C','Mon Apr 22 13:31:00 PDT 2013')
    ]
}

2 个答案:

答案 0 :(得分:2)

您应首先将日期字符串转换为python datetime对象,有关将字符串转换为datetime对象的信息,请参阅datetime.strptime

要记住的一件事是,您将遇到时区问题(除非您将其转换为GMT偏移)。作为解决方法,我建议使用dateutil模块而不是datetime。优点是dateutil更易于使用,仍然会返回datetime个对象。

from dateutil import parser
dst_string = 'Mon Apr 25 13:32:00 PDT 2013'
date_obj = parser.parse(dst_str)
print date_obj
>>> datetime.datetime(2013, 4, 25, 13, 32)

然后,您可以对datetime个对象的日期进行排序。

sorted(d['11163722404385'], key=lambda x: x[-1].date())

编辑:正如@Mark Ransom所指出的,时区可能特别棘手。通常,您必须自己处理缩写(PDT,EST,...),因为时区命名没有很好地定义。您可以使用dateutil here了解有关处理缩写时区的更多信息。

答案 1 :(得分:1)

您可以使用关键功能(link)对列表进行排序,该功能应使用strptimelink)将日期字符串转换为时间。

import time

def to_time(tup):
    return time.strptime(tup[4], "%a %b %d %X PDT %Y")

sorted(defaultdict['1116372240485'], key=to_time)

这只会对每个字典条目进行排序,而不是整个字典。