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.

Antworten:


212

Konvertieren Sie es einfach in einen Zeitstempel

datetime.datetime.fromtimestamp(ms/1000.0)

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.


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()

2
import pandas as pd

Date_Time = pd.to_datetime(df.NameOfColumn, unit='ms')
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.