[Edytowano zgodnie z sugestią w komentarzach]
Korzystanie z Ben Alpert odpowiedź na Jak mogę przekonwertować obiekt datetime na milisekundy od epoki (czas uniksowy) w Pythonie możemy wykonać następujące czynności:
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)
zwraca:
1435371005653
co odpowiada:Sob, 27 czerwca 2015 02:10:05 GMT (zgodnie z oczekiwaniami)
Możemy również użyć .strftime('%s')
z datetime aby uzyskać czas uniksowy, nawet milisekundy, korzystając z poniższych (ale nie jest to zalecane ):
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)
zwraca:
1435396205653
odpowiednik:Sob, 27 czerwca 2015 09:10:05 GMT (na moim Macu w San Diego; Uwaga) :to 7 godzin mniej niż mogliśmy się spodziewać).
Przyczynę błędu opisał J.F. Sebastian w komentarzach do powyższego linku oraz w tym odpowiedź dotycząca .strftime('%s')
zachowanie. J.F. Sebastian wskazuje, że „nie jest obsługiwany, nie jest przenośny, może dyskretnie generować błędny wynik dla świadomego obiektu daty i godziny, nie powiedzie się, jeśli dane wejściowe są w UTC (jak w pytaniu), ale lokalna strefa czasowa nie jest UTC”