반응형
질문
나는 RFC 3339 문자열을 파싱해야하는데, "2008-09-03T20:56:35.450686Z"
와 같은 형식을 Python의 datetime
유형으로 변환해야합니다.
나는 Python 표준 라이브러리에서 strptime
을 찾았지만, 그것은 매우 불편합니다.
이를 수행하는 가장 좋은 방법은 무엇인가요?
답변
python-dateutil
의 isoparse 함수
python-dateutil 패키지에는 질문에서처럼 RFC 3339 날짜 및 시간 문자열뿐만 아니라 다른 ISO 8601 날짜 및 시간 문자열(UTC 오프셋이 없는 문자열 또는 날짜만 나타내는 문자열 등)을 구문 분석하는 dateutil.parser.isoparse
가 있습니다.
>>> import dateutil.parser
>>> dateutil.parser.isoparse('2008-09-03T20:56:35.450686Z') # RFC 3339 format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=tzutc())
>>> dateutil.parser.isoparse('2008-09-03T20:56:35.450686') # ISO 8601 extended format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.isoparse('20080903T205635.450686') # ISO 8601 basic format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.isoparse('20080903') # ISO 8601 basic format, date only
datetime.datetime(2008, 9, 3, 0, 0)
python-dateutil 패키지에는 dateutil.parser.parse
도 있습니다. isoparse
와 비교하면, 아마도 덜 엄격할 것입니다. 하지만 두 함수 모두 매우 관대하며 전달하는 문자열을 해석하려고 시도합니다. 어떤 잘못된 해석의 가능성을 제거하려면, 이러한 함수보다 엄격한 것을 사용해야 합니다.
Python 3.7+의 내장 datetime.datetime.fromisoformat
과의 비교
dateutil.parser.isoparse
는 완전한 ISO-8601 형식 구문 분석기이지만, Python ≤ 3.10의 fromisoformat
은 일부러 그렇지 않습니다. Python 3.11에서는 fromisoformat
이 유효한 ISO 8601의 거의 모든 문자열을 지원합니다. 이 주의 사항에 대해서는 fromisoformat
의 문서를 참조하십시오. (이 답변을 참조하십시오.)
반응형
댓글