在具有BST时区的windows上使用python datetime.datetime.strTime

在具有BST时区的windows上使用python datetime.datetime.strTime,python,windows,timezone,binary-search-tree,strptime,Python,Windows,Timezone,Binary Search Tree,Strptime,我需要以许多不同的格式解析许多不同的日期。我有以下问题,不知道是否有人能解释为什么 以下内容适用于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 da

我需要以许多不同的格式解析许多不同的日期。我有以下问题,不知道是否有人能解释为什么

以下内容适用于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”同样含糊不清,我也不会感到惊讶

我强烈建议使用模块,其中英国民用时间被赋予字符串标识符
Europe/London
,UTC被称为
Etc/UTC
pytz
API将提供一致的结果,而与运行应用程序的用户或系统的区域设置无关


如果您正在处理必须绑定到区域的UI,或者用无法更改的格式解析输入,那么考虑使用缩写字典<代码> Pytz < /Cord>时区对象。例如:

{'BST':'Europe/London'}
。然后,您的应用程序可以统一使用UTC日期和时间,这将大大减少出错的可能性。

能否将
strtime
作为具体的实现,问题不是关于python,而是关于解释器使用的c运行时?除此之外,我要说的是,您的月份不必使用大写字母,尝试:8月而不是8月你真的需要时区%Z吗?也许没有它你也可以…-有什么需要调查的。。谢谢--主销是一个错误,发现得很好!我将编辑OP以更正它。我正在分析许多不同格式和不同地区的日期的喷射。派茨听起来很有趣,我来看看。你是对的;英国夏令时含糊不清,这也是“孟加拉国夏季时间”!!由于您需要支持多个不同的地区,因此可能会遇到“EST”情况,两个用户希望相同的确切输入具有不同的含义。小心,祝你好运。