【问题标题】:Checking if a date string is in UTC format检查日期字符串是否为 UTC 格式
【发布时间】:2011-10-06 06:18:34
【问题描述】:

我有一个日期字符串,例如“2011-11-06 14:00:00+00:00”。有没有办法检查这是否是UTC格式?我尝试使用utc = datetime.strptime('2011-11-06 14:00:00+00:00','%Y-%m-%d %H:%M%S+%z) 将上述字符串转换为日期时间对象,以便可以将其与 pytz.utc 进行比较,但我得到 'ValueError: 'z' is a bad directive in format '%Y-%m-%d %H:%M%S+%z'

如何检查日期字符串是否为 UTC?一些例子将不胜感激。

谢谢

【问题讨论】:

  • @S.Lott,我认为即使在 Python 3 中,小写的 %z 也无效。如果是,那么 docs 是错误的。
  • @senderle:docs.python.org/library/…。你是说'%z' 只适用于strftime?如果是这样,那么我认为您应该将其发布为答案。
  • aside:给定的字符串实际上 不是 一个有效的 iso-8601 日期时间,而是 两个 有效值(一个是日期,另一个是时间)。该标准在与T 连接的日期/时间值与其他仅相邻的值之间划出了一条相当清晰的界限。

标签: python datetime pytz


【解决方案1】:

一个简单的正则表达式就可以了:

>>> import re
>>> RE = re.compile(r'^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}$')
>>> bool(RE.search('2011-11-06 14:00:00+00:00'))
True

【讨论】:

    【解决方案2】:

    您所说的“UTC 格式”实际上是指ISO-8601?。这是prettycommonquestion

    【讨论】:

      【解决方案3】:

      您的格式字符串的问题是strptime 只是将解析时间字符串的工作传递给c 的strptime,并且不同风格的c 接受不同的指令。在您的情况下(似乎也是我的情况),%z 指令不被接受。

      文档页面中对此存在一些歧义。 datetime.datetime.strptime 文档指向 time.strptime 的格式规范,它不包含小写的 %z 指令,并指出

      某些平台可能支持其他指令,但只有此处列出的指令具有 ANSI C 标准化的含义。

      但它也指向here,其中确实包含小写%z,但重申

      支持的全套格式代码因平台而异,因为 Python 调用平台 C 库的 strftime() 函数,平台变化很常见。

      还有一个关于这个问题的bug report

      【讨论】:

        猜你喜欢
        • 2023-03-29
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        • 2011-11-18
        • 1970-01-01
        • 2021-03-14
        相关资源
        最近更新 更多