Programing

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

lottogame 2020. 10. 25. 11:32
반응형

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


따라서 Python 3에서는 .isoformat ()을 사용하여 ISO 8601 날짜를 생성 할 수 있지만 Python의 자체 datetime 지시문이 제대로 일치하지 않기 때문에 isoformat ()으로 생성 된 문자열을 datetime 객체로 다시 변환 할 수 없습니다. 즉, 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 또는 -HHMM 형식의 % z UTC 오프셋 (개체가 순진한 경우 빈 문자열). (비어 있음), +0000, -0400, +1030

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

나는 파이썬에서 이미 datetime이 끔찍하다는 것을 알고 있지만 이것은 실제로 불합리한 것을 넘어서 어리석은 땅으로 넘어갑니다.

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


결과적으로 이것이이 질문에 대한 현재 최선의 "솔루션"입니다.

pip install python-dateutil

그때...

import datetime
import dateutil.parser

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

반응형