Python strptime()和时区?

我有一个来自Blackberry IPD备份的CSV转储文件,使用IPDDump创build。 这里的date/时间string看起来像这样(其中EST是澳大利亚时区):

 Tue Jun 22 07:46:22 EST 2010 

我需要能够在Python中parsing这个date。 起初,我试图从datettime中使用strptime()函数。

 >>> datetime.datetime.strptime('Tue Jun 22 12:10:20 2010 EST', '%a %b %d %H:%M:%S %Y %Z') 

但是,出于某种原因,返回的datetime对象似乎没有任何关联的tzinfo

我没有读到这个页面上 ,显然datetime.strptime默默地丢弃tzinfo ,但是,我检查了文档,我找不到任何这种logging在这里 。

我已经能够使用第三方Python库dateutil得到parsing的date,但是我仍然对我是如何错误地使用in-built的strptime()感到好奇的? 有什么办法让strptime()和时区一起玩吗?

3 Solutions collect form web for “Python strptime()和时区?”

datetime模块文档说:

返回date_string对应的date时间,按照格式进行parsing。 这相当于datetime(*(time.strptime(date_string, format)[0:6]))

看到那个[0:6] ? 那得到你(year, month, day, hour, minute, second) 。 没有其他的。 没有提及时区。

有趣的是,[Win XP SP2,Python time.strptime ]将您的示例传递给time.strptime不起作用,但是如果剥离“%Z”和“EST”,它将起作用。 也使用“UTC”或“GMT”而不是“EST”的作品。 “PST”和“MEZ”不起作用。 令人费解。

我build议使用python-dateutil 。 它的parsing器已经能够parsing到目前为止我所引用的每个date格式。

 >>> from dateutil import parser >>> parser.parse("Tue Jun 22 07:46:22 EST 2010") datetime.datetime(2010, 6, 22, 7, 46, 22, tzinfo=tzlocal()) >>> parser.parse("Fri, 11 Nov 2011 03:18:09 -0400") datetime.datetime(2011, 11, 11, 3, 18, 9, tzinfo=tzoffset(None, -14400)) >>> parser.parse("Sun") datetime.datetime(2011, 12, 18, 0, 0) >>> parser.parse("10-11-08") datetime.datetime(2008, 10, 11, 0, 0) 

等等。 没有处理strptime()格式的废话…只是把它的date,它是正确的事情。

更新 :糟糕。 我错过了你原来的问题,你提到你使用了dateutil ,抱歉。 但是,我希望这个答案对其他遇到这个问题的人来说仍然有用,因为他们有dateparsing问题并且看到这个模块的实用性。

您的时间string与rfc 2822(电子邮件中的date格式,http标头)中的时间格式类似。 你只能用stdlibparsing它:

 >>> from email.utils import parsedate_tz >>> parsedate_tz('Tue Jun 22 07:46:22 EST 2010') (2010, 6, 22, 7, 46, 22, 0, 1, -1, -18000) 

查看为各种Python版本生成可识别时区的date时间对象的解决scheme: 从电子邮件中parsing具有时区的date 。

在这种格式下, EST在语义上相当于-0500 。 虽然一般来说, 时区缩写是不够的,但是唯一地确定一个时区 。

  • 循环通过python正则expression式匹配
  • Django模型select单一领域
  • 从子文件夹导入模块
  • Django表单 - 标签
  • 如何查找Python中是否存在目录
  • 如何清空Python中的列表?
  • 如何使Python脚本作为服务运行?
  • Python - 将UTCdate时间string转换为本地date时间
  • 如何获得只有在Python中的path的最后一部分?
  • 用于Python的list.index()函数,当没有find时不会抛出exception
  • 使用快速傅里叶变换分析audio