Jak przekonwertować znacznik czasu integer na DateTime Pythona
Mam plik danych zawierający znaczniki czasu, takie jak "1331856000000". Niestety, nie mam zbyt wiele dokumentacji dla tego formatu, więc nie jestem pewien, jak jest sformatowany znacznik czasu. Wypróbowałem Standard Pythona datetime.fromordinal()
i datetime.fromtimestamp()
i kilka innych, ale nic nie pasuje. Jestem prawie pewien, że konkretna liczba odpowiada bieżącej dacie (np. 2012-3-16), ale niewiele więcej.
Jak przekonwertować tę liczbę na datetime
?
1 answers
datetime.datetime.fromtimestamp()
jest poprawne, z tym, że prawdopodobnie masz znacznik czasu w milisekundach (jak w JavaScript), ale fromtimestamp()
oczekuje znacznika czasu Uniksa w sekundach.
Zrób to tak:
>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)
A wynikiem jest:
>>> date
datetime.datetime(2012, 3, 16, 1, 0)
Czy to odpowiada na twoje pytanie?
EDIT : J. F. Sebastian poprawnie zasugerował użycie true division by 1e3
(float 1000
). Różnica jest znacząca, jeśli chcesz uzyskać dokładne wyniki, dlatego zmieniłem mój odpowiedz. Różnica wynika z domyślnego zachowania Pythona 2.x, który zawsze zwraca int
podczas dzielenia (używając operatora /
) int
przez int
(nazywa się to dzieleniem podłogi ). Poprzez zastąpienie dzielnika 1000
(będącego int
) dzielnikiem 1e3
(reprezentującym 1000
jako float) lub float(1000)
(lub 1000.
itd.), podział staje się prawdziwym podziałem . Python 2.x zwraca float
podczas dzielenia int
przez float
, float
przez int
, float
przez float
itd. A kiedy w znaczniku czasowym jest pewna część ułamkowa przekazywana do metody fromtimestamp()
, wynik tej metody zawiera również informacje o tej części ułamkowej (jako liczbę mikrosekund).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-24 16:23:32