【问题标题】:Converting ISO 8601 date format with timezone in python在 python 中使用时区转换 ISO 8601 日期格式
【发布时间】:2012-12-25 14:45:47
【问题描述】:

我正在尝试将以下日期 (2012-12-25T08:52:00-05:00) 转换为 python 中的日期时间对象。但是,我无法弄清楚日期的 -05:00 部分是指什么。我只是想执行以下操作:

datetime.datetime.strptime('2012-12-25T08:52:00-05:00','%Y-%m-%dT%H:%M:%S')

但这会出现预期的“ValueError:未转换的数据仍然存在”。我只是想弄清楚日期的最后一部分是用来做什么的,以便我可以将该字符串转换为 python 中的适当日期时间对象。

节日快乐!

【问题讨论】:

    标签: python datetime iso8601


    【解决方案1】:

    您的日期似乎是ISO 8601 格式,我不认为datetime 处理字符串格式末尾的时区信息。

    你可以使用pip install python-dateutil,它的解析器可以返回一个datetime对象:

    import dateutil.parser
    datestr = '2012-12-25T08:52:00-05:00'
    dateutil.parser.parse(datestr)
    >>> datetime.datetime(2012, 12, 25, 8, 52, tzinfo=tzoffset(None, -18000)) 
    

    【讨论】:

    • 在 UTC 系统上 parse('1998-01-01T00:00:00Z') 给出 datetime.datetime(1998, 1, 1, 0, 0, tzinfo=tzlocal()) 在非 UTC 系统上它返回 datetime.datetime(1998, 1, 1, 0, 0, tzinfo=tzutc()) - 一个非常奇怪的不一致。
    【解决方案2】:

    -05:00 表示与 UTC 的时区偏移量,即%z 将是解析它的正确 strptime 参数。

    如果时间是 UTC,则可以使用 Z 指示偏移量,例如2012-12-25T08:52:00Z。不确定%z 是否真的会接受这个...

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      相关资源
      最近更新 更多