[英]Python 3.6 DateTime Strptime Returns error while Python 3.7 works well
我剛剛為我的日期數據創建了一個數據類型,它返回一個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'
這太奇怪了,是什么導致了這個問題? 我該如何解決?
好的,2天后,我檢查了Python 3.7更改日志 ,我發現支持Z
因為在Python 3.7中添加了UTC偏移。 在Python問題跟蹤器上查看此問題 ,該問題主要是關於添加對冒號的支持,但在頁面下方還提到了Z
支持。 另請參閱datetime
文檔
在版本3.7中更改 :當向strptime()方法提供%z指令時,UTC偏移量可以在小時,分鍾和秒之間使用冒號作為分隔符。 例如,'+01:00:00'將被解析為一小時的偏移量。 另外,提供'Z'與'+00:00'相同。
在我的課上,我不得不將時間格式更改為:
datetime.datetime.strptime(dateTime, "%Y-%m-%dT%H:%M:%S.%fZ")
我將結尾處的%z
更改為Z
,硬編碼偏移量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.