【问题标题】:datetime.strptime failure in CICI 中的 datetime.strptime 失败
【发布时间】:2020-02-02 02:02:50
【问题描述】:

我有以下仅在 CI 中发生的错误:

ValueError: time data '09.30.2019 17:50 EDT' does not match format '%m.%d.%Y %H:%M %Z'

这是我的测试:

def test_extract_time_from_page(pjm_html):
    expected_time = datetime.strptime("09.30.2019 17:50 EDT", "%m.%d.%Y %H:%M %Z")
    res = demand.extract_time_from_page(pjm_html)

    assert res == expected_time

它在本地传递。我不确定在 CI 环境中运行会有什么不同

编辑:我可以通过将我的机器时区更改为 EDT 以外的时间来重现这一点。你不能使用与datetime.strptime 不同的时区吗?

【问题讨论】:

    标签: python datetime python-3.6


    【解决方案1】:

    这是带有%Z 指令的known issue。当前文档令人困惑,有一个pending request 可以修改文档。待处理的文档更改说明了您遇到的问题:

    请注意,strptime 仅接受 %Z 的某些值:UTCGMT,以及在time.tzname 中为您自己定义的内容 语言环境。它将为任何无效字符串返回一个ValueError。为了 例如,居住在日本的人将拥有UTCGMTJST 作为有效值,但可能不是 EST

    【讨论】:

    • 我选择从字符串中剥离 %Z 值并使用 pytz 对其进行本地化:expected_time = timezone('US/Eastern').localize(datetime(2019, 9, 30, 17, 25), is_dst=True)
    【解决方案2】:

    可能是 pytz lib 的问题。比较 CI 工作者和本地的 pytz 库。 Here 你可以找到指向 wikipedia list of timezones 的解释,它说 EDT 是一个已弃用的时区。您可以尝试在 CI Worker 上更新您的 pytz 库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-09
      • 2012-08-13
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 2021-03-26
      相关资源
      最近更新 更多