2017-11-27 1 views
0

dtの2つの機能の下で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以降で動作し、正しい結果が得られます。

また、(dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()をPython 3.3以降で使用することもできます。

関連する問題