Wie Zeitzone (UTC) angeben, wenn Unix-Zeit Konvertierung? (Python)
-
21-08-2019 - |
Frage
Ich habe einen UTC-Zeitstempel in dem IS8601-Format und ich versuche, es zu Unix-Zeit zu konvertieren. Dies ist meine Konsolensitzung:
In [9]: mydate
Out[9]: '2009-07-17T01:21:00.000Z'
In [10]: parseddate = iso8601.parse_date(mydate)
In [14]: ti = time.mktime(parseddate.timetuple())
In [25]: datetime.datetime.utcfromtimestamp(ti)
Out[25]: datetime.datetime(2009, 7, 17, 7, 21)
In [26]: datetime.datetime.fromtimestamp(ti)
Out[26]: datetime.datetime(2009, 7, 17, 2, 21)
In [27]: ti
Out[27]: 1247815260.0
In [28]: parseddate
Out[28]: datetime.datetime(2009, 7, 17, 1, 21, tzinfo=<iso8601.iso8601.Utc object at 0x01D74C70>)
Wie Sie sehen können, kann ich nicht die richtige Zeit zurück. Die Stunde voraus ist um eins, wenn ich fromtimestamp () verwenden, und es ist vor sechs Stunden, wenn ich verwende utcfromtimestamp ()
Jede Beratung?
Danke!
Lösung
Sie können eine struct_time
in UTC mit datetime.utctimetuple()
und dann wandeln diese in einem Unix-Zeitstempel mit calendar.timegm()
:
calendar.timegm(parseddate.utctimetuple())
Diese kümmert sich auch um jede Sommerzeit versetzt, weil utctimetuple()
diese normalisiert.
Andere Tipps
Ich kann nur raten, nur eine Stunde Unterschied kann wegen der Zeitzonen, aber wegen der Sommerzeit ein / aus.
naive_utc_dt = parseddate.replace(tzinfo=None)
timestamp = (naive_utc_dt - datetime(1970, 1, 1)).total_seconds()
# -> 1247793660.0
Sehen Sie mehr Details in href="https://stackoverflow.com/a/8778548/4279">.
und zurück:
utc_dt = datetime.utcfromtimestamp(timestamp)
# -> datetime.datetime(2009, 7, 17, 1, 21)
import time
import datetime
import calendar
def date_time_to_utc_epoch(dt_utc): #convert from utc date time object (yyyy-mm-dd hh:mm:ss) to UTC epoch
frmt="%Y-%m-%d %H:%M:%S"
dtst=dt_utc.strftime(frmt) #convert datetime object to string
time_struct = time.strptime(dtst, frmt) #convert time (yyyy-mm-dd hh:mm:ss) to time tuple
epoch_utc=calendar.timegm(time_struct) #convert time to to epoch
return epoch_utc
#----test function --------
now_datetime_utc = int(date_time_to_utc_epoch(datetime.datetime.utcnow()))
now_time_utc = int(time.time())
print (now_datetime_utc)
print (now_time_utc)
if now_datetime_utc == now_time_utc :
print ("Passed")
else :
print("Failed")