在带有BST时区的windows上使用python datetime.datetime.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: time data does not match format

但是,如果我在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下工作得很好?

谢谢,马特

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

我强烈推荐使用pytz模块,其中英国民用时间被赋予字符串标识符Europe/London, UTC被称为Etc/UTCpytz API将给出一致的结果,而不管用户或运行应用程序的系统的语言环境如何。

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

相关内容

  • 没有找到相关文章

最新更新