Різниця між модулями дати та часу Python від модулів часу


137

Я намагаюся з'ясувати відмінності між datetimeі timeмодулями, і що кожен з них повинен використовуватися.

Я знаю, що datetimeпередбачено і дати, і час. Яке використання timeмодуля?

Приклади були б вдячні, і відмінності щодо часових поясів особливо цікаві.

Відповіді:


102

timeмодуль головним чином для роботи з мітками часу Unix; виражається як число з плаваючою комою, прийняте за секунди з епохи Unix. datetimeмодуль може підтримувати багато з тих же операцій, але забезпечує більш об'єктно - орієнтований набір типів, а також має деяку обмежену підтримку часових поясів.


22
Далі, які відмінності між timeі datetime.time?
SparkAndShine

Було б добре деталізувати такі властивості, як, якщо це в режимі реального часу / монотонне. Як і в стандарті POSIX у вас є: CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_THREAD і т.д ... На POSIX годинник см: stackoverflow.com/questions/3523442 / ...
Vajk Hermecz

12

Дотримуйтесь, щоб timeзапобігти двозначності DST.

Використовуйте виключно системний timeмодуль замість datetimeмодуля, щоб запобігти проблемам неоднозначності з переходом на літній час (DST) .

Перетворення у будь-який формат часу, включаючи місцевий час, досить легко:

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()- число з плаваючою комою, що представляє час у секундах з епохи системи. time.time()ідеально підходить для однозначного маркування часу.

Якщо система додатково запускає мережевий протокол часу (NTP) dæmon, то в кінцевому підсумку виходить досить солідна часова база.

Ось документація на timeмодуль.


У вашому прикладі ви використовуєте time.localtime(), що, звичайно, запекло DST. Якщо ми будемо пуристами, чи не повинні ми time.gmtime()замість цього використовувати ? :)
Seamus

@Seamus Просте тестування обох команд ipythonпоказує, що time.gmtime()приводиться кортеж, тоді як time.time()дає час UNIX епохи як одне десятичне значення секунд, що минули з 00:00:00 UTC, четвер, 1 січня 1970 р. Функція time.localtime(t)перетворює час епохи в локальний час кортежу. Отже, відповідь на ваше запитання - «ні».
Серж Стротобандт

Чи є спосіб додати дні до часового об’єкта? з datetime, існує метод timedelta (днів = 6).
Nehemias Herrera

@NehemiasHerrera t = time.time()- число з плаваючою комою, що представляє час у секундах з часу епохи системи. Отже, можна просто додати або субстратувати 86400 секунд на кожен день; t += 86400
Серж Стротобандт

5

Модуль часу може бути використаний, коли вам просто потрібен час певного запису - наприклад, скажімо, що у вас є окрема таблиця / файл для транзакцій на кожен день, тоді вам просто знадобиться час. Однак тип даних часу зазвичай використовується для зберігання різниці в часі між двома пунктами часу.

Це також можна зробити, використовуючи дату, але якщо ми маємо справу лише з часом на певний день, тоді може використовуватися часовий модуль.

Час дати використовується для зберігання певних даних та часу для запису. Як у прокатному агентстві. Датою, що належить, буде тип даних дати.


3

Якщо вас цікавлять часові пояси, варто розглянути питання про використання пітцу.


8
це здається, що він найбільше цікавиться модулями часу та дати та відмінностями часових поясів між ними. з усією належною повагою притягувати до цього ще одну залежність - це неабияке значення.
sbartell

3
Підтримка часових поясів як в модулях часу, так і в датах дійсно дуже погана ... якщо він справді зацікавлений у тому, щоб керувати часовими поясами корисним чином, то він справді повинен знати про pytz. Ви привертаєте залежності, щоб вирішити проблему, що ваші нинішні залежності не допомагають вирішити вашу проблему ...
donkopotamus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.