【问题标题】:Parsing Datetime in Python with timezone使用时区在 Python 中解析日期时间
【发布时间】:2018-01-01 11:24:23
【问题描述】:
如何用时区解析这个日期和时间?
date_time=datetime.strptime("2017-06-04T01:00:00+04:00", '%Y-%m-%dT%H:%M:%S%Z')
我收到类似
的错误
ValueError: time data '2017-06-04T01:00:00+04:00' does not match format '%Y-%m-%dT%H:%M:%S %Z'
当我删除“%Z”时,错误就像
ValueError: unconverted data remains: +04:00
我认为错误在于格式化时区。请帮忙。
【问题讨论】:
标签:
python-3.x
parsing
datetime
timezone
utc
【解决方案1】:
对这种形式的时区使用小写 z
date_time=datetime.strptime("2017-06-04T01:00:00+04:00", '%Y-%m-%dT%H:%M:%S%z')
【解决方案2】:
你可以使用dateutil package解析
import dateutil.parser
dateutil.parser.parse('2008-09-03T20:56:35.450686Z')
datetime.datetime(2017, 6, 4, 1, 0, tzinfo=tzoffset(None, 14400))
用于安装包
pip install python-dateutil
【解决方案3】:
在我看来,strptime 没有处理这种格式的时区信息的指令。表示时区的字符串部分需要不带冒号。
>>> from datetime import datetime
>>> datetime.strptime("2017-06-04T01:00:00+0400", '%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2017, 6, 4, 1, 0, tzinfo=datetime.timezone(datetime.timedelta(0, 14400)))
您当然可以安排使用正则表达式预处理日期:
>>> re.sub(r'(?<=[+=][0-9]{2}):', '', "2017-06-04T01:00:00+04:00")
'2017-06-04T01:00:00+0400'
如果您可以允许自己使用不属于标准发行版的库,那么箭头将适合此,因为它特别适合时间戳。
>>> import arrow
>>> arrow.get("2017-06-04T01:00:00+04:00")
<Arrow [2017-06-04T01:00:00+04:00]>