python datetime strptime与格式不匹配

时间:2018-10-06 19:58:40

标签: python python-datetime

这是我要运行的代码

from datetime import datetime

date="08/30/2017 10:02 pm (PDT)"

dt = datetime.strptime(date, '%m/%d/%Y %I:%M %p (%Z)')

date是一个值为08/30/2017 10:02 PM (PDT)

的字符串

对我来说看起来很好,但是python给我这个错误:

time data '08/30/2017 10:02 PM (PDT)' does not match format '%m/%d/%Y %I:%M %p (%Z)' 

该代码是在装有python 2.7的远程计算机上运行的。但是,如果我手动将这些代码键入本地python终端。它工作得很好。

有什么可以改变的吗? (我尝试在unicode / str之间更改日期,没有区别)

2 个答案:

答案 0 :(得分:2)

检查TZ环境变量的值。 time.strptime使用TZ变量来消除时区缩写的歧义,因为否则它们将不是唯一的。我可以使用TZ=Europe/Berlin重现匹配错误,但是可以使用TZ=America/Tijuana成功解析。

如果另一台计算机具有仅使用数字时区的TZ数据,则可能会出现差异,这是某些时区(在2017年)的最新更改(这也意味着该计算机将在此时区工作)有一个非常过时的时区数据库)。

答案 1 :(得分:1)

如果您将PDT替换为UTC,则您的解决方案有效-似乎无法识别PDT:

from datetime import datetime

date="08/30/2017 10:02 pm (UTC)"

dt = datetime.strptime(date, '%m/%d/%Y %I:%M %p (%Z)')

print(dt) # 2017-08-30 22:02:00

vs。

date="08/30/2017 10:02 pm (PDT)"

dt = datetime.strptime(date, '%m/%d/%Y %I:%M %p (%Z)')

print(dt) #  time data '08/30/2017 10:02 pm (PDT)' does not match format '%m/%d/%Y %I:%M %p (%Z)'

https://pyfiddle.io/在2.7模式下)