programing

Python의 .isoformat() 문자열을 datetime 개체로 다시 변환하는 방법

bestprogram 2023. 9. 4. 20:29

Python의 .isoformat() 문자열을 datetime 개체로 다시 변환하는 방법

따라서 Python 3에서는 .isoformat()으로 ISO 8601 날짜를 생성할 수 있지만, Python 자체의 날짜 시간 지시어가 제대로 일치하지 않기 때문에 isoformat()으로 만든 문자열을 날짜 시간 개체로 다시 변환할 수 없습니다.즉, 05:00 대신 %z = 0500입니다(이는 .isoformat()에서 생성됨).

예:

>>> 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) .

+HHMM 또는 -HHHMM 형식의 %z UTC 오프셋(객체가 순진한 경우 빈 문자열).(공백), +0000, -0400, +1030

즉, Python은 자체 문자열 형식 지정 지침도 준수하지 않습니다.

데이트 시간이 파이썬에서 이미 끔찍하다는 것을 알지만, 이것은 비합리적인 것을 넘어 단순한 어리석음의 땅으로 정말로 넘어갑니다.

이건 사실이 아니라고 말해주세요.

파이썬 3.7+

Python 3.7 이후에는 방법이 있습니다.datetime.fromisoformat()그것은 정확히 정반대입니다.isoformat().

구 파이썬

이전 Python을 사용하는 경우 다음 질문에 대한 현재의 최상의 "솔루션"입니다.

pip install python-dateutil

그러면...

import datetime
import dateutil

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

사용해 보십시오.

>>> def gt(dt_str):
...     dt, _, us = dt_str.partition(".")
...     dt = datetime.datetime.strptime(dt, "%Y-%m-%dT%H:%M:%S")
...     us = int(us.rstrip("Z"), 10)
...     return dt + datetime.timedelta(microseconds=us)

용도:

>>> gt("2008-08-12T12:20:30.656234Z")
datetime.datetime(2008, 8, 12, 12, 20, 30, 656234)

언급URL : https://stackoverflow.com/questions/28331512/how-to-convert-pythons-isoformat-string-back-into-datetime-object