python datetime strptime 与格式不匹配

python datetime strptime does not match format

这是我想要的代码 运行

from datetime import datetime

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

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

日期是一个字符串,值为 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 之间更改日期,没有区别)

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

可以成功解析

如果另一台机器具有仅使用数字时区的 TZ 数据,则可能会出现差异的另一个来源,这是某些时区的最近更改(2017 年)(这也意味着此机器所在的机器) works 会有一个非常过时的时区数据库。

如果将 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

对比

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 模式下)