2015-09-01 11 views
5

Ich habe eine CSV-Datei mit dem Datum im Uniximestamp Format mit Millisekunden und Zeitzone Informationen in Millisekunden. Ich möchte dies in ein besser nutzbares Datetime-Format für die weitere Verarbeitung umwandeln.Python: Wie konvertiert man unixtimestamp und timezone in Datetime-Objekt?

Zum Beispiel ist die Zeit 1437323953822 und Zeitzone ist -14400000.

kann ich den Zeitstempel in ein Datetime konvertieren, indem

datetime.datetime.fromtimestamp(1437323953822/1000) 

Verwendung Aber wie inkorporieren ich jetzt die Zeitzone, die ist -4 UTC-Zeit von dem, was ich weiß.

(-14400000/1000/60/60) = -4 

Wie nutze ich diese Zeitzone, um die tatsächliche Zeit zu erhalten?

+0

Wenn Sie die tatsächliche Zeit sagen, was meinst du? Suchst du nach der UTC-Zeit? –

+0

Ich möchte die tatsächliche Ortszeit. – sfactor

+0

Sie sollten die richtige tatsächliche Zeit richtig bekommen? Erhalten Sie stattdessen UTC? –

Antwort

1

fromtimestamp können auch einen anderen Parameter für die Zeitzone nehmen, eine Unterklasse von tzinfo:

classmethod datetime.fromtimestamp(timestamp[, tz])

Rückkehr der lokale Datum und die Uhrzeit zu dem Zeitstempel POSIX entsprechen, wie durch time.time() zurückgeführt wird. Wenn das optionale Argument tz Kein oder nicht angegeben ist, wird der Zeitstempel in das lokale Datum und die lokale Uhrzeit der Plattform konvertiert, und das zurückgegebene Datetime-Objekt ist naiv.

Else tz muss eine Instanz einer Klasse tzinfo Unterklasse, und die Zeitstempel werden auf tz ‚s Zeitzone umgewandelt. In diesem Fall ist das Ergebnis entspricht tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz)).

0

fromtimestamp() bereits wieder Ihre Ortszeit dh Sie brauchen nicht die utc Offset zu befestigen, wenn fromtimestamp() automatisch korrekt bestimmt:

#!/usr/bin/env python 
from datetime import datetime 

local_time = datetime.fromtimestamp(1437323953822 * 1e-3) 
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000) 

fromtimestamp() kann in einigen Fällen fehlschlagen, zB wenn die lokale Zeitzone in der Vergangenheit einen anderen UTC-Offset hatte und fromtimestamp() keine historische Zeitzonendatenbank auf einer bestimmten Plattform (insbesondere Windows) verwendet. In diesem Fall baut die lokale Zeit ausdrücklich von UTC-Zeit und die gegebene utc Offset:

#!/usr/bin/env python 
from datetime import datetime, timedelta 

utc_time = datetime(1970, 1, 1) + timedelta(milliseconds=1437323953822) 
utc_offset = timedelta(milliseconds=-14400000) 
local_time = utc_time + utc_offset 
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000) 

Python always expects POSIX Epoch und daher ist es in Ordnung, es zu codieren. Die explizite Formel kann präziser sein (kein Rundungsfehler) und kann einen breiteren Bereich von Eingabe-Zeitstempeln akzeptieren (Bereich fromtimestamp() hängt von der Plattform ab und kann enger sein als der entsprechende Bereich datetime).

Verwandte Themen