Różnica między modułami czasu i daty w języku Python

147

Próbuję dowiedzieć się różnice pomiędzy datetimei timemodułów, i co każdy powinien być stosowany.

Wiem, że datetimezawiera datę i godzinę. Jaki jest pożytek z timemodułu?

Przykłady byłyby mile widziane, a różnice dotyczące stref czasowych byłyby szczególnie interesujące.

myusuf3
źródło

Odpowiedzi:

105

timemoduł jest głównie do pracy z znaczków czas uniksowy; wyrażona jako liczba zmiennoprzecinkowa, która jest liczbą sekund od epoki unixowej. datetimemoduł może obsługiwać wiele takich samych operacji, ale zapewnia większą obiektowego zestaw typów, a także ma pewne ograniczone wsparcie dla stref czasowych.

SingleNegationElimination
źródło
23
Co więcej, jakie są różnice między timei datetime.time?
SparkAndShine
1
Byłoby miło, gdybyśmy szczegółowo opisali właściwości, na przykład w czasie rzeczywistym / monotonicznie. Podobnie jak w standardzie POSIX masz: CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_THREAD, etc ... Na zegarach POSIX patrz: stackoverflow.com/questions/3523442/…
Vajk Hermecz
16

Trzymaj się, timeaby uniknąć niejednoznaczności czasu letniego.

Używaj wyłącznie timemodułu systemowego zamiast datetimemodułu, aby uniknąć niejednoznaczności związanych z czasem letnim (DST) .

Konwersja do dowolnego formatu czasu, w tym czasu lokalnego, jest dość łatwa:

import time
t = time.time()

time.strftime('%Y-%m-%d %H:%M %Z', time.localtime(t))
'2019-05-27 12:03 CEST'

time.strftime('%Y-%m-%d %H:%M %Z', time.gmtime(t))
'2019-05-27 10:03 GMT'

time.time()jest liczbą zmiennoprzecinkową reprezentującą czas w sekundach od epoki systemu. time.time()jest idealny do jednoznacznego oznaczania czasu.

Jeśli system dodatkowo uruchamia program Network Time Protocol (NTP), uzyskuje się całkiem solidną podstawę czasu.

Oto dokumentacja z timemodułu.

Serge Stroobandt
źródło
W swoim przykładzie używasz time.localtime(), który oczywiście ma zapieczętowany czas letni. Jeśli mamy być purystami, czy nie powinniśmy używać time.gmtime()zamiast tego? :)
Seamus
1
@Seamus Po prostu przetestowanie obu poleceń w programie ipythonpokazuje, że time.gmtime()zwraca krotkę, podczas gdy time.time()podaje czas epoki UNIX jako pojedynczą wartość dziesiętną sekund, które upłynęły od 00:00:00 UTC, czwartek, 1 stycznia 1970 r. Funkcja time.localtime(t)konwertuje czas epoki na lokalny krotka czasu. Tak więc odpowiedź na twoje pytanie brzmi „nie”.
Serge Stroobandt
Czy istnieje sposób na dodanie dni do obiektu czasu? z datetime jest metoda timedelta (days = 6).
Nehemias Herrera
@NehemiasHerrera t = time.time()to liczba zmiennoprzecinkowa reprezentująca czas w sekundach od epoki systemu. Dlatego każdego dnia można po prostu dodać lub odjąć 86400 sekund; t += 86400
Serge Stroobandt
5

Moduł czasu może być użyty, gdy potrzebujesz tylko czasu określonego rekordu - powiedzmy, że masz oddzielną tabelę / plik dla transakcji na każdy dzień, wtedy potrzebujesz tylko czasu. Jednak typ danych czasu jest zwykle używany do przechowywania różnicy czasu między 2 punktami czasu.

Można to również zrobić za pomocą datetime, ale jeśli mamy do czynienia tylko z czasem dla określonego dnia, można użyć modułu czasu.

Datetime służy do przechowywania określonych danych i czasu dla rekordu. Jak w wypożyczalni. Terminem byłby typ danych typu data i godzina.

Jan S
źródło
3

Jeśli interesują Cię strefy czasowe, powinieneś rozważyć użycie pytz.

donkopotamus
źródło
8
wydaje się, że najbardziej interesują go moduły czasu i daty i godziny oraz różnice między strefami czasowymi. z całym szacunkiem, wprowadzenie w to kolejnej zależności jest właściwie nieistotne.
sbartell,
3
Obsługa stref czasowych zarówno w module time, jak i datetime jest bardzo słaba ... jeśli naprawdę interesuje go obsługa stref czasowych w użyteczny sposób to naprawdę powinien wiedzieć o pytz.
Wprowadzasz