Wie erstelle ich eine Datums- und Uhrzeitangabe in Python aus Millisekunden?

138

Ich kann ein ähnliches Date-Objekt in Java mit java.util.Date (Millisekunden) erstellen . Wie erstelle ich das Vergleichbare in Python?

Weist ein Date-Objekt zu und initialisiert es so, dass es die angegebene Anzahl von Millisekunden seit der als "Epoche" bekannten Standardbasiszeit darstellt, nämlich 1. Januar 1970, 00:00:00 GMT.

Joshua
quelle

Antworten:

212

Konvertieren Sie es einfach in einen Zeitstempel

datetime.datetime.fromtimestamp(ms/1000.0)
vartec
quelle
17
Ein Hinweis - In Python 3 führt (/) eine Gleitkommadivision durch. Verwenden Sie (//), um eine integrale Division durchzuführen.
John Millikin
3
Willst du eigentlich gar keine Float Division? Andernfalls verlieren Sie an Genauigkeit unter 1 Sekunde (im Bruchteil des Zeitstempels). Verwenden Sie besser ms / 1000.0 ohne Kürzung.
Brian
4
Sicher unterstützt datetime es aber immer? Wenn wir eine Genauigkeit von weniger als einer Sekunde haben, scheint es falsch, sie wegzuwerfen. Wenn wir keinen Schaden anrichten, behalten wir einfach diese ursprüngliche Präzision bei.
Brian
30
Um die Präzision ohne Verwendung von Schwimmern zu erhalten, können Sie auch datetime.utcfromtimestamp(ms//1000).replace(microsecond=ms%1000*1000)
Folgendes
2
Ein weiteres Problem bei dieser Lösung: "fromtimestamp () kann ValueError auslösen, wenn der Zeitstempel außerhalb des Wertebereichs liegt, der von den Funktionen localtime () oder gmtime () der Plattform C unterstützt wird. Dies ist häufig auf Jahre von 1970 bis 1970 beschränkt 2038. " - Wie lange soll dein Code dauern ???
Mike Nagetier
12

Was ist damit? Ich nehme an, man kann sich darauf verlassen, dass Daten vor 1970 und nach 2038 bearbeitet werden.

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

wie in der Python-Standardbibliothek erwähnt:

fromtimestamp () kann ValueError auslösen, wenn der Zeitstempel außerhalb des Wertebereichs liegt, der von den Funktionen localtime () oder gmtime () der Plattform C unterstützt wird. Es ist üblich, dass dies auf Jahre von 1970 bis 2038 beschränkt ist.

Mike Nagetier
quelle
6
Sie könnten verwendenutc_time = datetime(1970, 1, 1) + timedelta(milliseconds=millis)
JFS
9

Etwas schwer wegen der Verwendung von Pandas, funktioniert aber:

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

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