[Diedit saran berikut di komentar]
Menggunakan Ben Alpert jawaban untuk Bagaimana saya bisa mengonversi objek datetime menjadi milidetik sejak Epoch (waktu unix) dengan Python kita dapat melakukan hal berikut:
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)
kembali:
1435371005653
yang setara dengan:Sab, 27 Jun 2015 02:10:05 GMT (seperti yang diharapkan)
Kita juga dapat menggunakan .strftime('%s')
datetime untuk mendapatkan waktu unix, bahkan milidetik menggunakan yang berikut (tetapi ini tidak disarankan ):
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)
kembali:
1435396205653
setara dengan:Sab, 27 Jun 2015 09:10:05 GMT (di mac saya di San Diego; Catatan :ini adalah 7 jam dari yang kami harapkan).
Penyebab kesalahan dijelaskan oleh J.F. Sebastian di komentar tautan di atas dan di ini jawaban tentang .strftime('%s')
perilaku. J.F. Sebastian menunjukkan bahwa "itu tidak didukung, tidak portabel, mungkin secara diam-diam menghasilkan hasil yang salah untuk objek datetime yang sadar, gagal jika input dalam UTC (seperti dalam pertanyaan) tetapi zona waktu lokal bukan UTC"