datetime : 시간대 오프셋으로 타임 스탬프 가져 오기

Nov 23 2020

다음 형식의 날짜에서 타임 스탬프를 얻고 싶습니다.

Mon, 23 Nov 2020 19:00:00 GMT
Mon, 23 Nov 2020 20:00:00 +0100

다음 문을 사용하여 날짜를 datetime개체 로 변환 합니다.

dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %Z')
dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %z')

그러나 .timestamp()방법을 사용 하면 epoch와 다른 초가 인쇄됩니다. %Z지시문이 datetime객체에 시간대 정보를 추가 하지 않는 이유는 무엇 입니까? 시간대를 어떻게 고려하여 타임 스탬프가 동일합니까?

답변

MrFuppes Nov 24 2020 at 07:21

Python에서 일치하지 않는 datetime 구문 분석 시간대에 유의하십시오 . 귀하의 문제는 %Z그것하게, strptime 동의 - 특정 문자열 (GMT, UTC와 time.tzname의 값 문서를 하지만, 실제로 그것을 무엇을하지 않습니다). 반환 된 datetime 객체는 순진합니다. 그래서 파이썬은 timestamp()메서드 를 호출하면 현지 시간이라고 가정 합니다.

대신 dateutil의 파서를 사용할 수 있습니다.

from dateutil.parser import parse

for s in ("Mon, 23 Nov 2020 19:00:00 GMT", "Mon, 23 Nov 2020 20:00:00 +0100"):
    dt = parse(s)
    print(repr(dt), dt.timestamp())

# datetime.datetime(2020, 11, 23, 19, 0, tzinfo=tzutc()) 1606158000.0
# datetime.datetime(2020, 11, 23, 20, 0, tzinfo=tzoffset(None, 3600)) 1606158000.0