我需要用许多不同的格式解析许多不同的日期。我有以下的问题,想知道是否有人可以解释为什么;
下面的代码在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/UTC
。pytz
API将给出一致的结果,而不管用户或运行应用程序的系统的语言环境如何。
如果您正在处理一个必须绑定到区域设置的UI,或者使用无法更改的格式解析输入,那么请考虑使用pytz
时区对象的缩写字典。例如:{'BST': 'Europe/London'}
。然后您的应用程序可以统一地使用UTC日期和时间,这将大大减少错误的可能性。