我需要以许多不同的格式解析许多不同的日期。我遇到以下问题,并想知道是否可以解释为什么;
以下适用于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下工作正常吗?
感谢,
太
答案 0 :(得分:1)
在我看来,解析这样的三个字母的时区代码并不是一个好习惯(除非你当然别无选择)。例如,“EST”在美国通常用于UTC-4/5,并且在澳大利亚也常用。因此,对“EST”的任何支持都必须依赖于语言环境。如果“BST”同样含糊不清,我也不会感到惊讶。
我强烈建议使用pytz
模块,其中英国民用时间为字符串标识符Europe/London
,UTC称为Etc/UTC
。无论运行应用程序的用户或系统的区域设置如何,pytz
API都会提供一致的结果。
如果您正在处理必须与区域设置关联的UI,或者使用您无法更改的格式解析输入,请考虑使用缩写字典到pytz
时区对象。例如:{'BST': 'Europe/London'}
。然后,您的应用程序可以统一使用UTC日期和时间,这将大大降低出错的可能性。