2017-11-27 15 views
0

dt의 두 기능 아래 thee를 호출하면 5 시간이 추가되는 이유는 무엇입니까? 나는 그것이 동일하게 남아있을 것이라고 생각했다.Convertingt EST datetime 개체를 UTC unix 타임 스탬프로 변환하고 EST로 돌아가서 5 시간을 추가하는 이유는 무엇입니까?

from datetime import datetime, time, timedelta 
from pytz import timezone 

def est_datetime_to_utc_timestamp(dt): 
    dt_utc = dt.astimezone(timezone('UTC')) 
    ts = int(dt_utc.strftime("%s")) 
    return ts 

def utc_timestamp_to_est_datetime(ts): 
    dt = datetime.fromtimestamp(ts, timezone('UTC')) 
    dt = dt.astimezone(timezone('America/New_York')) 
    return dt 

dt = timezone('America/New_York').localize(datetime(2017, 11, 27, 0, 0)) 

utc_timestamp_to_est_datetime(est_datetime_to_utc_timestamp(dt)) 

> datetime.datetime(2017, 11, 27, 5, 0, tzinfo=<DstTzInfo 'America/New_York' EST-1 day, 19:00:00 STD>) 

답변

1

strftime("%s")은 모든 구현에서 정의되지 않습니다.

.timestamp()으로 바꾸면 Python 3.3 이상에서 작동하며 올바른 결과를 제공합니다.

또는 파이썬 3.3 이상이 아닌 경우 (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()을 사용할 수 있습니다.