【问题标题】:python datetime strptime does not match formatpython datetime strptime与格式不匹配
【发布时间】:2018-10-06 19:58:39
【问题描述】:

这是我要运行的代码

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 之间更改日期,没有区别)

【问题讨论】:

  • 我猜本地 Python 也是 2.7?
  • @SterlingButters 是的
  • strptime 使用底层 C 库(参见 strftime)——如果您在不同的操作系统上运行,它可以有不同的解释。

标签: python python-datetime


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果您将 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 模式下)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多