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?

Author: fragilewindows, 2012-03-17

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

 226
Author: Tadeck,
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