Come faccio a creare un datetime in Python da millisecondi?


142

Posso creare un simile oggetto Date in Java di java.util.Date (millisecondi) . Come posso creare il paragonabile in Python?

Alloca un oggetto Date e lo inizializza per rappresentare il numero specificato di millisecondi dall'ora base standard nota come "l'epoca", vale a dire il 1 ° gennaio 1970, 00:00:00 GMT.

Risposte:


215

Basta convertirlo in data e ora

datetime.datetime.fromtimestamp(ms/1000.0)

17
Una nota: in Python 3, (/) eseguirà la divisione in virgola mobile. Per eseguire la divisione integrale, utilizzare (//).
John Millikin,

3
Non vuoi davvero dividere il galleggiante? Altrimenti stai perdendo una precisione inferiore a 1 secondo (trattenuta nella parte frazionaria del timestamp). Meglio usare ms / 1000.0 senza troncamento.
Brian,

4
Sicuramente il datetime lo supporta sempre? Se abbiamo una precisione inferiore al secondo, sembra sbagliato buttarla via. Se non lo facciamo, non viene fatto alcun danno: manteniamo solo quella precisione originale.
Brian,

30
Per mantenere la precisione senza usare i float, puoi anche fare:datetime.utcfromtimestamp(ms//1000).replace(microsecond=ms%1000*1000)
tsg

2
un altro problema con questa soluzione: "fromtimestamp () può aumentare ValueError, se il timestamp è al di fuori dell'intervallo di valori supportati dalle funzioni della piattaforma C localtime () o gmtime (). È comune che questo sia limitato agli anni a partire dal 1970 2038." - quanto dovrebbe durare il tuo codice ???
mike rodent,

12

Che dire di questo? Presumo che si possa contare su di gestire le date prima del 1970 e dopo il 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

come menzionato nella lib standard di Python:

fromtimestamp () può aumentare ValueError, se il timestamp è al di fuori dell'intervallo di valori supportati dalle funzioni C localtime () o gmtime () della piattaforma. È comune che questo sia limitato agli anni dal 1970 al 2038.


6
potresti usareutc_time = datetime(1970, 1, 1) + timedelta(milliseconds=millis)
jfs il

9

Un po 'pesante a causa dell'utilizzo di Panda ma funziona:

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

2
import pandas as pd

Date_Time = pd.to_datetime(df.NameOfColumn, unit='ms')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.