【问题标题】:Python3 strptime from ISO8601 with timezone来自 ISO8601 的 Python3 strptime 与时区
【发布时间】:2017-03-03 05:34:56
【问题描述】:

如何将 ISO8601 时间格式的字符串转换为 python3 日期时间。 这是我的时间:

2017-03-03T11:30:00+04:00

以及我尝试的方式:

datetime.strptime(appointment['datetime'], '%Y-%m-%dT%H:%M:%S%z')

这里的问题是,我不知道如何在 .strptime 方法的格式参数中表示 +4:00 时区。

【问题讨论】:

标签: python python-3.x date


【解决方案1】:

请注意,python datetime 中的%z 不包含冒号:

%z:格式为 +HHMM 或 -HHMM 的 UTC 偏移量(如果对象是幼稚的,则为空字符串)例如+0000, -0400, +1030

但是,示例中的日期字符串确实有一个冒号,例如+04:00。只需不包括该冒号,您就可以解析日期。

>>> s = "2017-03-03T11:30:00+04:00"
>>> datetime.strptime(s[:len(s)-3] + s[len(s)-2:], '%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2017, 3, 3, 11, 30, tzinfo=datetime.timezone(datetime.timedelta(0, 14400)))

我建议你使用这个强大的库python-dateutil:

>>> from dateutil import parser
>>> parser.parse("2017-03-03T11:30:00+04:00")
datetime.datetime(2017, 3, 3, 11, 30, tzinfo=tzoffset(None, 14400))

【讨论】:

  • dateutil.parser太宽了,比如parse("Thu, 25 Sep 2003 10:49:41 -0300")也可以。如何将时间格式限制为 ISO-8601 with timezone?
猜你喜欢
  • 1970-01-01
  • 2011-12-16
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2020-02-20
相关资源
最近更新 更多