簡體   English   中英

Python 3.6 DateTime Strptime在Python 3.7運行良好時返回錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM