2017-11-27 6 views
0

Warum führt das Aufrufen von 2 Funktionen unter dt zu 5 Stunden? Ich dachte, es würde gleich bleiben.Warum konvertieren EST Datetime Objekt in UTC Unix Zeitstempel und zurück zu EST hinzufügen 5 Stunden?

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>) 

Antwort

1

strftime("%s") ist nicht in jeder Implementierung definiert.

Ersetzen Sie es mit .timestamp() funktioniert für Python 3.3 und gibt das richtige Ergebnis.

Alternativ können Sie (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds() verwenden, wenn nicht auf Python 3.3 +.