来自ISO8601的Python3 strptime带有时区

yer*_*syl 3 python date python-3.x

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

2017-03-03T11:30:00+04:00
Run Code Online (Sandbox Code Playgroud)

我尝试的方式:

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

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

AKS*_*AKS 6

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

%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)))
Run Code Online (Sandbox Code Playgroud)

我建议你使用这个功能强大的库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))
Run Code Online (Sandbox Code Playgroud)