在Windows上使用python datetime.datetime.strptime处理BST时区

2 投票
1 回答
2897 浏览
提问于 2025-04-17 00:16

我需要处理很多不同格式的日期,但遇到了一些问题,想请教一下大家为什么会这样。

在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下却没问题呢?

谢谢,

Matt.

1 个回答

1

我觉得解析像三字母时区代码这样的做法并不好(当然,如果没有其他选择,那就另说了)。比如说,“EST”这个缩写在美国通常代表的是UTC-4/5,但在澳大利亚也常常用到。所以,任何对“EST”的支持都得看具体的地区。如果“BST”也是类似的情况,我一点也不会觉得惊讶。

我强烈推荐使用pytz这个模块,在这个模块里,英国的标准时间用字符串标识为Europe/London,而UTC时间则叫Etc/UTC。使用pytz的API,不管用户或系统的地区是什么,结果都是一致的。

如果你正在开发一个需要与地区相关的用户界面,或者处理一些你无法改变格式的输入,那么可以考虑使用一个缩写和pytz时区对象的字典。例如:{'BST': 'Europe/London'}。这样,你的应用就可以统一处理UTC的日期和时间,这样会大大减少出错的可能性。

撰写回答