Python の .isoformat() 文字列を datetime オブジェクトに戻す方法 [重複] 質問する

Python の .isoformat() 文字列を datetime オブジェクトに戻す方法 [重複] 質問する

したがって、Python 3 では、.isoformat() を使用して ISO 8601 の日付を生成できますが、Python 独自の datetime ディレクティブが適切に一致しないため、isoformat() によって作成された文字列を datetime オブジェクトに変換することはできません。つまり、05:00 (.isoformat() によって生成される) ではなく、%z = 0500 になります。

例えば:

>>> strDate = d.isoformat()
>>> strDate
'2015-02-04T20:55:08.914461+00:00'

>>> objDate = datetime.strptime(strDate,"%Y-%m-%dT%H:%M:%S.%f%z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python34\Lib\_strptime.py", line 500, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "C:\Python34\Lib\_strptime.py", line 337, in _strptime
    (data_string, format))
ValueError: time data '2015-02-04T20:55:08.914461+00:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'

Python の strptime ドキュメントより: (https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

%z UTC オフセットは +HHMM または -HHMM の形式で表されます (オブジェクトが naive の場合は空文字列)。 (空)、+0000、-0400、+1030

つまり、簡単に言えば、Python は独自の文字列フォーマット ディレクティブにも従いません。

Python の datetime がすでにひどいことは知っていますが、これは本当に不合理を通り越して、まったく愚かな領域に達しています。

これが真実ではないと言ってください。

ベストアンサー1

Python 3.7以上

datetime.fromisoformat()Python 3.7 以降では、 と全く逆の動作をするメソッドがありますisoformat()

古いPython

古い Python を使用している場合、これがこの質問に対する現時点での最善の「解決策」です。

pip install python-dateutil

それから...

import datetime
import dateutil

def getDateTimeFromISO8601String(s):
    d = dateutil.parser.parse(s)
    return d

おすすめ記事