Bagaimana cara membuat datetime dengan Python dari milidetik?

142

Saya bisa membuat objek Date yang serupa di Java dengan java.util.Date (milidetik) . Bagaimana cara membuat yang sebanding dengan Python?

Mengalokasikan objek Tanggal dan menginisialisasi untuk mewakili jumlah milidetik yang ditentukan sejak waktu basis standar yang dikenal sebagai "zaman", yaitu 1 Januari 1970, 00:00:00 GMT.

Joshua
sumber

Jawaban:

215

Cukup konversikan ke stempel waktu

datetime.datetime.fromtimestamp(ms/1000.0)
vartec
sumber
17
Catatan - dalam Python 3, (/) akan melakukan pembagian titik-mengambang. Untuk melakukan pembagian integral, gunakan (//).
John Millikin
3
Bukankah kamu sebenarnya menginginkan divisi kendaraan hias? Kalau tidak, Anda kehilangan presisi di bawah 1 detik (ditahan di bagian pecahan cap waktu). Lebih baik menggunakan ms / 1000.0 tanpa pemotongan.
Brian
4
Tentunya datetime selalu mendukungnya? Jika kita memiliki presisi sub-detik, rasanya salah untuk membuangnya. Jika tidak, tidak ada salahnya dilakukan - kami hanya mempertahankan ketepatan aslinya.
Brian
30
Untuk menjaga presisi tanpa menggunakan pelampung, Anda juga dapat melakukan:datetime.utcfromtimestamp(ms//1000).replace(microsecond=ms%1000*1000)
tsg
2
masalah lain dengan solusi ini: "fromtimestamp () dapat meningkatkan ValueError, jika timestamp berada di luar kisaran nilai yang didukung oleh platform C localtime () atau fungsi gmtime (). Biasanya hal ini dibatasi hingga tahun pada 1970 melalui 2038. " - berapa lama kode Anda diharapkan bertahan ???
mike rodent
12

Bagaimana dengan ini? Saya kira itu dapat diandalkan untuk menangani tanggal sebelum tahun 1970 dan setelah 2038.

target_date_time_ms = 200000 # or whatever
base_datetime = datetime.datetime( 1970, 1, 1 )
delta = datetime.timedelta( 0, 0, 0, target_date_time_ms )
target_date = base_datetime + delta

seperti yang disebutkan dalam lib standar Python:

fromtimestamp () dapat meningkatkan ValueError, jika timestamp berada di luar kisaran nilai yang didukung oleh platform C localtime () atau fungsi gmtime (). Biasanya hal ini dibatasi hingga tahun 1970 hingga 2038.

mike rodent
sumber
6
Anda bisa menggunakanutc_time = datetime(1970, 1, 1) + timedelta(milliseconds=millis)
jfs
9

Agak berat karena menggunakan panda tetapi berfungsi:

import pandas as pd
pd.to_datetime(msec_from_java, unit='ms').to_pydatetime()
mde
sumber
2
import pandas as pd

Date_Time = pd.to_datetime(df.NameOfColumn, unit='ms')
Artem Krylov
sumber