在具有BST时区的窗口上使用python datetime.datetime.strptime

时间:2011-08-24 15:13:29

标签: python windows timezone binary-search-tree strptime

我需要以许多不同的格式解析许多不同的日期。我遇到以下问题,并想知道是否可以解释为什么;

以下适用于Linux系统:

from datetime import datetime
datetime.strptime('Tue 23 Aug 2011 09:00:07 PM BST','%a %d %b %Y %H:%M:%S %p %Z')

但是在Windows下运行会引发

ValueError:时间数据与格式

不匹配

但是,如果我在Windows上尝试GMT而不是BST,它可以正常工作;

from datetime import datetime
datetime.strptime('Tue 23 Aug 2011 09:00:07 PM GMT','%a %d %b %Y %H:%M:%S %p %Z')

有没有理由python不了解Windows下的BST时区,但它在Linux下工作正常吗?

感谢,

1 个答案:

答案 0 :(得分:1)

在我看来,解析这样的三个字母的时区代码并不是一个好习惯(除非你当然别无选择)。例如,“EST”在美国通常用于UTC-4/5,并且在澳大利亚也常用。因此,对“EST”的任何支持都必须依赖于语言环境。如果“BST”同样含糊不清,我也不会感到惊讶。

我强烈建议使用pytz模块,其中英国民用时间为字符串标识符Europe/London,UTC称为Etc/UTC。无论运行应用程序的用户或系统的区域设置如何,pytz API都会提供一致的结果。

如果您正在处理必须与区域设置关联的UI,或者使用您无法更改的格式解析输入,请考虑使用缩写字典到pytz时区对象。例如:{'BST': 'Europe/London'}。然后,您的应用程序可以统一使用UTC日期和时间,这将大大降低出错的可能性。