Різниця між модулями дати та часу 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.