我刚刚为日期数据创建了一种数据类型,该数据类型返回了datetime.datetime
对象
代码如下:
import datetime
class Date:
def __new__(cls, dateTime, *args, **kwargs):
return datetime.datetime.strptime(dateTime, "%Y-%m-%dT%H:%M:%S.%f%z")
所以每次我给这个类一个ISO-8601
时,它都应该从字符串中返回datetime对象...
Python 3.7示例:
Date("2018-12-09T08:56:12.189Z")
# Returns => datetime.datetime(2018, 12, 9, 8, 56, 12, 189000, tzinfo=datetime.timezone.utc)
这很好,但是当我在Python 3.6或Python 3.5上使用它时:
# Python 3.5 Traceback
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/_strptime.py", line 510, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib/python3.5/_strptime.py", line 343, in _strptime
(data_string, format))
ValueError: time data '2018-12-09T08:56:12.189Z' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
# Python 3.6 Traceback
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib/python3.6/_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data '2018-12-09T08:56:12.189Z' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
太奇怪了,是什么原因引起的?我该如何解决?
答案 0 :(得分:4)
好吧,两天后,我检查了Python 3.7 changelog,发现对Z
的支持是因为Python 3.7中添加了UTC偏移量。请在Python问题跟踪器上查看此issue,这主要是关于添加对冒号的支持,但在页面的下方还提到了Z
的支持。另请参阅datetime
docs,其中说
版本3.7中的更改:将%z指令提供给strptime()方法时,UTC偏移量可以使用冒号作为小时,分钟和秒之间的分隔符。例如,“ + 01:00:00”将被解析为一个小时的偏移量。 此外,提供“ Z”与“ +00:00”相同。
在课堂上,我不得不将时间格式更改为此:
datetime.datetime.strptime(dateTime, "%Y-%m-%dT%H:%M:%S.%fZ")
我将%z
的末尾更改为Z
,对偏移量进行了硬编码。