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