从Python中的字符串中提取日期时间的最佳方法
问题描述:
我有一个脚本解析出表示日期和时间的电子邮件标题中的字段。是这些字符串的一些例子如下:从Python中的字符串中提取日期时间的最佳方法
Fri, 10 Jun 2011 11:04:17 +0200 (CEST)
Tue, 1 Jun 2011 11:04:17 +0200
Wed, 8 Jul 1992 4:23:11 -0200
Wed, 8 Jul 1992 4:23:11 -0200 EST
之前,我在我的东西相当不错的只是用datetime.datetime.strptime
像这样的一些字符串的末端面临的CEST/EST部分:
msg['date'] = 'Wed, 8 Jul 1992 4:23:11 -0200'
mail_date = datetime.datetime.strptime(msg['date'][:-6], '%a, %d %b %Y %H:%M:%S')
我试图把一个正则表达式放在一起来匹配字符串的日期部分,但最后却排除了时区信息,但是我遇到了正则表达式问题(我无法匹配冒号)。
正在使用正则表达式来解析上述所有示例的最佳方式?如果是这样,有人可以分享一个匹配这些例子的正则表达式吗?最后,我期待有一个日期时间对象。
答
从python time to age part 2, timezones:
from email import utils
utils.parsedate_tz('Fri, 10 Jun 2011 11:04:17 +0200 (CEST)')
utils.parsedate_tz('Fri, 10 Jun 2011 11:04:17 +0200')
utils.parsedate_tz('Fri, 10 Jun 2011 11:04:17')
输出是:
(2011, 6, 10, 11, 4, 17, 0, 1, -1, 7200)
(2011, 6, 10, 11, 4, 17, 0, 1, -1, 7200)
(2011, 6, 10, 11, 4, 17, 0, 1, -1, None)
答
也许我误解了你的问题,但不会简单split
就够了吗?
#!/usr/bin/python
d = ["Fri, 10 Jun 2011 11:04:17 +0200 (CEST)", "Tue, 1 Jun 2011 11:04:17 +0200",
"Wed, 8 Jul 1992 4:23:11 -0200", "Wed, 8 Jul 1992 4:23:11 -0200 EST"]
for i in d:
print " ".join(i.split()[0:5])
Fri, 10 Jun 2011 11:04:17
Tue, 1 Jun 2011 11:04:17
Wed, 8 Jul 1992 4:23:11
Wed, 8 Jul 1992 4:23:11
我看到老RFC822模块也有类似的功能,但我不知道email.utils的。谢谢。 – ajt 2011-06-10 14:31:56