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

我需要用许多不同的格式来parsing许多不同的date。 我有以下的麻烦,并想知道是否anyopne可以解释为什么;

以下在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下正常工作?

谢谢,

马特。

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

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

如果您正在使用必须绑定到语言环境的UI,或者使用不能更改的格式解析输入,则可以考虑使用缩写词典来pytz区对象。 例如: {'BST': 'Europe/London'} 。 然后,您的应用程序可以统一使用UTC日期和时间,这将大大减少错误的可能性。