如何在Python中解析DST日期?

4

我在字典中有一个日期字段 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')
    ]
}

1
请问您能提供更多细节吗?"dictionarylist"是什么?一个列表吗? - Markon
2
你的日期不是一个日期,而是一个字符串。 - cmd
3
datetime.datetime.strptime('Mon Apr 22 13:32:00 PDT 2013', '%a %b %d %X PDT %Y') 可以翻译为:使用指定格式字符串将日期时间字符串 'Mon Apr 22 13:32:00 PDT 2013' 转换为 datetime 对象。 - cmd
@aorcsik 我尝试了 %Z,但它没有起作用。 - Think
1
不想岔开话题,但你从哪里获取这个日期的?看起来像是数据库中的某些内容。如果是的话,在查询中可以指定更好的数据库输出。 - cmd
显示剩余12条评论
2个回答

2

首先,您需要将日期字符串转换为Python的datetime对象,可以参考datetime.strptime将字符串转换为datetime对象。

需要注意的是,由于时区问题(除非您将其转换为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 处理缩写时区的信息


请务必阅读 parse() 的文档,特别是 tzinfos 参数。 - Mark Ransom

1
你可以使用键函数(链接)对列表进行排序,该函数应使用strptime链接)将日期字符串转换为时间。
import time

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

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

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

谢谢“cmd”的回答,他先回答了问题。你也+1分。但是我想知道时区%Z为什么不起作用。有什么想法吗? - Think

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