반응형
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)
반응형
'Programing' 카테고리의 다른 글
JSON 보안 모범 사례? (0) | 2020.10.25 |
---|---|
수은 클라이언트로 힘내? (0) | 2020.10.25 |
Jackson 주석을 사용하여 중첩 된 값을 속성에 매핑하는 방법은 무엇입니까? (0) | 2020.10.25 |
Android SDK 관리자를 통한 느린 SDK 다운로드 (0) | 2020.10.25 |
Instagram에 공유 버튼이 있습니까? (0) | 2020.10.25 |