본문 바로가기
Python/Python FAQ

Python ISO 8601 형식의 날짜를 구문 분석하는 방법은 무엇인가요?, How do I parse an ISO 8601-formatted date?

by 베타코드 2023. 6. 25.
반응형

질문


나는 RFC 3339 문자열을 파싱해야하는데, "2008-09-03T20:56:35.450686Z"와 같은 형식을 Python의 datetime 유형으로 변환해야합니다.

나는 Python 표준 라이브러리에서 strptime을 찾았지만, 그것은 매우 불편합니다.

이를 수행하는 가장 좋은 방법은 무엇인가요?


답변


python-dateutilisoparse 함수

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의 문서를 참조하십시오. (이 답변을 참조하십시오.)

반응형

댓글