날짜 활용 없이 파이썬에서 시간대 인식 문자열을 날짜 시간으로 변환하는 방법?
시간대 인식 문자열을 변환해야 합니다."2012-11-01T04:16:13-04:00"
피톤에게datetime
물건.
봤어요.dateutil
parse 기능이 있는 module이지만, 의존성이 추가되어 별로 사용하고 싶지 않습니다.
그럼 어떻게 하죠?저는 다음과 같은 것을 시도해 보았지만 운이 없었습니다.
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은 훨씬 빠른 릴리스 주기를 가질 수 있는 외부 라이브러리를 사용하여 적절하게 구성된 시간대를 제공합니다.
이는 부작용으로 시간대 파싱 또한 외부 라이브러리일 필요가 있음을 의미합니다. 만약dateutil
무게가 너무 많이 나가기 때문에 대신 사용하면 특정 포맷을 잘 해석할 수 있습니다.
>>> 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
무려 4KB가 작습니다.그것을 비교해 보세요.python-dateutil
148KB입니다.
파이썬 3.2 시점에서 파이썬은 간단한 오프셋 기반 시간대를 처리할 수 있으며,%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 Doc입니다.
from dateutil.parser import parse
get_date_obj = parse("2012-11-01T04:16:13-04:00")
print get_date_obj
원래 질문의 코드에 두 가지 문제가 있습니다. 즉, 다음과 같은 것이 없어야 합니다.:
표준 시간대에서 "오프셋으로서의 표준 시간대"에 대한 형식 문자열은 소문자입니다.%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
이렇게 전환할 수 있습니다.
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')
표준 시간대를 알 수 없는 개체를 생성하고 해당 개체를 교체할 수 있습니다.tzinfo
시간대별로 알아채게 해요.DateTime
나중에 목적을 정합니다.
from datetime import datetime
import pytz
unware_time = datetime.strptime("2012-11-01 04:16:13", "%Y-%m-%d %H:%M:%S")
aware_time = unaware_time.replace(tzinfo=pytz.UTC)
파이썬을 처음 접하지만 변환할 방법을 찾았습니다.
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)
이 일을 그렇게 많이 자르지 않고 할 수 있는 더 좋은 방법이 있을 거라고 확신하지만, 이로써 일은 끝이 났습니다.
Mohhideen bin Mohammed의 dateutil을 사용하기 위한 이 제안은 작은 도서관이 필요하더라도 분명히 최고의 해결책입니다.다양한 형태의 실패가 발생하기 쉬운 다른 접근법을 사용했습니다.여기에 이를 위한 좋은 기능이 있습니다.
from dateutil.parser import parse
def parse_date_convert(date, fmt=None):
if fmt is None:
fmt = '%Y-%m-%d %H:%M:%S' # Defaults to : 2022-08-31 07:47:30
get_date_obj = parse(str(date))
return str(get_date_obj.strftime(fmt))
dates = ['2022-08-31T07:47:30Z','2022-08-31T07:47:29.098Z','2017-05-27T07:20:18.000-04:00','2012-11-01T04:16:13-04:00']
for date in dates:
print(f'Before: {date} After: {parse_date_convert(date)}')
결과:
Before: 2022-08-31T07:47:30Z After: 2022-08-31 07:47:30
Before: 2022-08-31T07:47:29.098Z After: 2022-08-31 07:47:29
Before: 2017-05-27T07:20:18.000-04:00 After: 2017-05-27 07:20:18
Before: 2012-11-01T04:16:13-04:00 After: 2012-11-01 04:16:13
이렇게 TZ를 대체하는 Slicing split 등 다양한 형태를 시도해 본 결과:
dates = ['2022-08-31T07:47:30Z','2022-08-31T07:47:29.098Z','2017-05-27T07:20:18.000-04:00','2012-11-01T04:16:13-04:00']
for date in dates:
print(f'Before: {date} After: {date.replace("T", " ").replace("Z", "")}')
당신은 여전히 저조한 결과를 가지고 있습니다.아래와 같이
Before: 2022-08-31T07:47:30Z After: 2022-08-31 07:47:30
Before: 2022-08-31T07:47:29.098Z After: 2022-08-31 07:47:29.098
Before: 2017-05-27T07:20:18.000-04:00 After: 2017-05-27 07:20:18.000-04:00
Before: 2012-11-01T04:16:13-04:00 After: 2012-11-01 04:16:13-04:00
언급URL : https://stackoverflow.com/questions/13182075/how-to-convert-a-timezone-aware-string-to-datetime-in-python-without-dateutil
'programing' 카테고리의 다른 글
문자열에서 워드프레스 쇼트코드 실행 (0) | 2023.09.24 |
---|---|
window.크기 조정Internet Explorer에서 이벤트 실행 (0) | 2023.09.24 |
오류 2002(HY000):'localhost'(10061)에서 MySQL 서버에 연결할 수 없습니다. (0) | 2023.09.24 |
ES6 모듈 가져오기에 옵션 전달 (0) | 2023.09.24 |
좋은 자바스크립트 타임 픽커란? (0) | 2023.09.24 |