[Upraveno následující návrh v komentářích]
Pomocí Ben Alpert's odpověď na Jak mohu převést objekt datetime na milisekundy od epochy (čas unixu) v Pythonu můžeme udělat následující:
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)
vrátí:
1435371005653
což je ekvivalentní:So, 27 Jun 2015 02:10:05 GMT (podle očekávání)
Můžeme také použít datetime .strftime('%s')
k získání unixového času, dokonce i milisekund pomocí následujícího (to se ale nedoporučuje ):
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)
vrátí:
1435396205653
ekvivalentní k:So, 27 Jun 2015 09:10:05 GMT (na mém počítači Mac v San Diegu; Poznámka :to je o 7 hodin méně, než jsme možná očekávali).
Příčinu chyby popisuje J. F. Sebastian v komentářích k výše uvedenému odkazu a v tomto odpověď týkající se .strftime('%s')
chování. J.F. Sebastian poukazuje na to, že „není podporováno, není přenosné, může tiše produkovat nesprávný výsledek pro objekt s datem a časem, selže, pokud je vstup v UTC (jako v otázce), ale místní časové pásmo není UTC“