2

我需要以许多不同的格式解析许多不同的日期。我遇到以下问题,想知道是否有人可以解释原因;

以下适用于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下可以正常工作?

谢谢,

马特。

4

1 回答 1

1

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

我强烈建议使用给pytz英国民用时间赋予字符串标识符Europe/London并调用 UTC的模块Etc/UTC。无论用户的pytz语言环境或运行应用程序的系统如何,API 都会给出一致的结果。

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

于 2011-08-24T15:50:59.500 回答