2015-09-01 12 views
5

Mam plik csv z datetime w formacie unixtimestamp z milisekundami i informacje strefy czasowej również w milisekundach. Chcę przekonwertować to na bardziej użyteczny format datetime do dalszego przetwarzania.Python: Jak przekonwertować unixtimestamp i strefę czasową na obiekt datetime?

Na przykład, czas to 1437323953822, a strefa czasowa to -14400000.

mogę przekonwertować do datetime timestamp za pomocą

datetime.datetime.fromtimestamp(1437323953822/1000) 

Ale jak mogę teraz włączyć strefę czasową, która wynosi -4 czas UTC z tego co wiem.

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

Jak korzystać z tej strefy czasowej, aby uzyskać aktualny czas?

+0

Kiedy mówisz o czasie rzeczywistym, co masz na myśli? Szukasz czasu UTC? –

+0

Chcę rzeczywisty czas lokalny. – sfactor

+0

Powinieneś uzyskać prawidłowy aktualny czas, prawda? Czy otrzymujesz zamiast tego UTC? –

Odpowiedz

1

fromtimestamp mogą również inny parametr dla strefy czasowej, podklasę tzinfo:

classmethod datetime.fromtimestamp(timestamp[, tz])

Zwraca lokalną datę i czas odpowiadający datownik POSIX takie jak są zwracane przez time.time(). Jeśli opcjonalny argument tz jest pusty lub nie jest określony, znacznik czasu jest konwertowany na lokalną datę i godzinę lokalnej platformy, a zwracany obiekt datetime jest naiwny.

reszta tz musi być przykładem klasy tzinfo podklasy i znacznik czasu przekształca się w strefie czasowej tz „S. W tym przypadku wynik jest równoważne tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz)).

0

fromtimestamp() już wraca czasu lokalnego tj, nie trzeba dołączyć UTC przesunięcie jeśli fromtimestamp() określa go poprawnie automatycznie:

#!/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() w niektórych przypadkach może się nie udać, np. jeśli lokalna strefa czasowa miała inne przesunięcie utc w przeszłości, a fromtimestamp() nie korzysta z historycznej bazy danych strefy czasowej na danej platformie (w szczególności Windows). W takim przypadku konstruowania czasu lokalnego wyraźnie od czasu UTC, a biorąc pod uwagę 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 i dlatego jest ok, aby go zakodować. Wyraźna formuła może być bardziej precyzyjna (bez błędu zaokrąglania) i może akceptować szerszy zakres znaczników czasu wejściowego (zakres fromtimestamp() zależy od platformy i może być węższy niż odpowiadający zakres datetime).

Powiązane problemy