dateutil없이 파이썬에서 시간대 인식 문자열을 datetime으로 변환하는 방법은 무엇입니까?
시간대 인식 문자열을 파이썬 datetime
객체 로 변환해야 합니다.
예를 들면 2012-11-01T04:16:13-04:00
.
dateutil
이를 수행하는 구문 분석 기능이 있는 모듈이 있지만 종속성을 추가하므로 실제로 사용하고 싶지 않습니다.
그래서 어떻게 할 수 있습니까? 나는 다음과 같은 것을 시도했지만 운이 없다.
datetime.datetime.strptime("2012-11-01T04:16:13-04:00", "%Y-%m-%dT%H:%M:%S%Z")
Python 3.7부터 datetime.datetime.fromisoformat()
형식을 처리 할 수 있습니다.
>>> import datetime
>>> datetime.datetime.fromisoformat('2012-11-01T04:16:13-04:00')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)))
이전 Python 버전에서는 수동으로 시간대를 정의하지 않으면 할 수 없습니다.
Python은 너무 빨리 구식이되기 때문에 시간대 데이터베이스를 포함하지 않습니다. 대신 Python은 적절하게 구성된 시간대를 제공하기 위해 훨씬 더 빠른 릴리스주기를 가질 수있는 외부 라이브러리에 의존합니다.
부작용으로 이는 시간대 구문 분석 도 외부 라이브러리 여야 함을 의미합니다 . dateutil
너무 무거운 경우 iso8601
대신 사용하면 특정 형식을 잘 구문 분석합니다.
>>> import iso8601
>>> iso8601.parse_date('2012-11-01T04:16:13-04:00')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=<FixedOffset '-04:00'>)
iso8601
A는 무려 4 킬로바이트 작은이. 그 tot python-dateutil
의 148KB를 비교하십시오 .
Python 3.2부터 Python 은 간단한 오프셋 기반 시간대를 처리 할 수 있으며 타임 스탬프에서 시간대 오프셋을 %z
구문 분석 -hhmm
하고 +hhmm
있습니다. 즉, ISO 8601 타임 스탬프의 :
경우 시간대에서 제거 해야합니다.
>>> from datetime import datetime
>>> iso_ts = '2012-11-01T04:16:13-04:00'
>>> datetime.strptime(''.join(iso_ts.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000)))
적절한 ISO 8601 구문 분석의 부족은 Python 문제 15873 에서 추적되고 있습니다.
다음은 dateutil 패키지를 사용하는 datetime 객체에 대한 Python 문서 입니다.
from dateutil.parser import parse
get_date_obj = parse("2012-11-01T04:16:13-04:00")
print get_date_obj
원래 질문의 코드에는 두 가지 문제가 있습니다. :
시간대에 a가 없어야 하며 "시간대를 오프셋으로 사용" 의 형식 문자열 은 대문자가 %z
아닌 소문자 %Z
입니다.
이것은 Python v3.6 에서 나를 위해 작동합니다.
>>> from datetime import datetime
>>> t = datetime.strptime("2012-11-01T04:16:13-0400", "%Y-%m-%dT%H:%M:%S%z")
>>> print(t)
2012-11-01 04:16:13-04:00
저는 Python을 처음 접했지만 변환하는 방법을 찾았습니다.
2017-05-27T07:20:18.000-04:00
...에
2017-05-27T07:20:18
새로운 유틸리티를 다운로드하지 않고.
from datetime import datetime, timedelta
time_zone1 = int("2017-05-27T07:20:18.000-04:00"[-6:][:3])
>>returns -04
item_date = datetime.strptime("2017-05-27T07:20:18.000-04:00".replace(".000", "")[:-6], "%Y-%m-%dT%H:%M:%S") + timedelta(hours=-time_zone1)
문자열을 너무 많이 자르지 않고이 작업을 수행 할 수있는 더 좋은 방법이 있다고 확신하지만이 작업을 완료했습니다.
이렇게 변환 할 수 있습니다.
date = datetime.datetime.strptime('2019-3-16T5-49-52-595Z','%Y-%m-%dT%H-%M-%S-%f%z')
date_time = date.strftime('%Y-%m-%dT%H:%M:%S.%fZ')
'program story' 카테고리의 다른 글
모듈 및 / 또는 패키지에서 Python 클래스 구성 (0) | 2020.12.30 |
---|---|
info.plist에서 "응용 프로그램에 iPhone 환경이 필요함"키의 의미는 무엇입니까? (0) | 2020.12.30 |
constexpr 함수는 언제 컴파일 타임에 평가됩니까? (0) | 2020.12.30 |
Visual Studio를 설치하지 않고 빌드 에이전트에서 코드 분석 (FxCop> 10) 실행 (0) | 2020.12.30 |
힘내 병합 : 여러 충돌에 대해 허용 (0) | 2020.12.30 |