[Redigerad efter förslag i kommentarerna]
Använder Ben Alperts svar på Hur kan jag konvertera ett datetime-objekt till millisekunder sedan epok (unixtid) i Python vi kan göra följande:
from datetime import datetime
def unix_time(dt):
epoch = datetime.utcfromtimestamp(0)
delta = dt - epoch
return delta.total_seconds()
def unix_time_millis(dt):
return int(unix_time(dt) * 1000)
a = datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ")
unix_time_millis(a)
returnerar:
1435371005653
vilket motsvarar:lör, 27 juni 2015 02:10:05 GMT (som förväntat)
Vi kan också använda datetimes .strftime('%s')
för att få unix-tid, till och med millisekunder med följande (men detta rekommenderas inte ):
from decimal import Decimal
int(Decimal(datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ").strftime('%s.%f'))*1000)
returnerar:
1435396205653
motsvarande:lör, 27 juni 2015 09:10:05 GMT (på min mac i San Diego; Obs :detta är 7 timmar ledigt vad vi kan ha förväntat oss).
Orsaken till felet beskrivs av J.F. Sebastian i kommentarerna till länken ovan och i detta svar angående .strftime('%s')
beteende. J.F. Sebastian påpekar att "det stöds inte, det är inte portabelt, det kan i tysthet producera ett felaktigt resultat för ett medvetet datetime-objekt, det misslyckas om inmatningen är i UTC (som i frågan) men den lokala tidszonen är inte UTC"