有没有办法用datetime.strptime
以"+000:00"格式解析时区?例如:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> datetime.strptime("12:34:56+0000", "%X%z")
datetime.datetime(1900, 1, 1, 12, 34, 56, tzinfo=datetime.timezone.utc)
>>> datetime.strptime("12:34:56+00:00", "%X%z")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Python34lib_strptime.py", line 500, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "C:Python34lib_strptime.py", line 337, in _strptime
(data_string, format))
ValueError: time data '12:34:56+00:00' does not match format '%X%z'
有什么想法吗?
目前,还没有治愈的方法,下面是和解释:https://bugs.python.org/issue15873更确切地说,在这里:https://bugs.python.org/msg169952。但你可以通过这种方式覆盖这个问题:
from datetime import datetime
d = "2015-04-30T23:59:59+00:00"
if ":" == d[-3:-2]:
d = d[:-3]+d[-2:]
print(datetime.strptime(d, "%Y-%m-%dT%H:%M:%S%z"))
改编自被拒绝的编辑:
Python>=3.7:
from datetime import datetime
d = "2019-12-25T23:59:59+00:00"
print(datetime.strptime(d, "%Y-%m-%dT%H:%M:%S%z"))
在版本3.7中更改:当将%z指令提供给strptime()方法时,UTC偏移量可以使用冒号作为小时、分钟和秒之间的分隔符。例如,"+01:00"将被解析为一小时的偏移量。此外,提供"Z"与"+00:0"相同。
https://docs.python.org/3.7/library/datetime.html
Python<=3.6
没有内置的方法,但最好的解决方案是:
from datetime import datetime
d = "2019-12-25T23:59:59+00:00"
if ":" == d[-3]:
d = d[:-3]+d[-2:]
print(datetime.strptime(d, "%Y-%m-%dT%H:%M:%S%z"))
解释:https://bugs.python.org/issue15873https://bugs.python.org/msg169952
另一个解决方案是使用dateutil
库:
from dateutil import parser
mystr = '2015-04-30T23:59:59+00:00'
x = parser.parse(mystr)
# 2015-04-30 23:59:59+00:00
老问题,但我想我应该加上这个。
从3.7开始,您可以使用time.fromisoformat():
from datetime import time
iso_datetime_string = "2021-01-01T00:00:00+00:00"
print(time.fromisoformat(iso_datetime_string))
脱离主题,但可能对其他人有用:如果你试图做与OP相反的操作,也没有本地方法可以通过.strftime()转换datetime对象,并使用格式为"的zulu偏移量+00:00";(有%z,但这会给你"+0000")。我找到的解决方案是datetime.sisoformat(),该解决方案在3.7 之前也有效