Справочник
Модуль datetime предоставляет классы для обработки времени и даты разными способами. Поддерживается и стандартный способ представления времени, однако больший упор сделан на простоту манипулирования датой, временем и их частями.
Классы, предоставляемые модулем datetime:
datetime.date(year, month, day)
стандартная дата. Атрибуты: year, month, day. Неизменяемый объект.
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
содержит всю информацию объектов datetime.date плюс datetime.time.
datetime.datetime принимает несколько дополнительных аргументов: год, месяц, день, час, минута и секунда. Это также позволяет вам указывать информацию о микросекундах и часовом поясе.
datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
стандартное время, не зависит от даты. Атрибуты: hour, minute, second, microsecond, tzinfo.
datetime.timedelta
описывает определенный период во времени, который находится между двумя различными моментами
| Атрибут | Значение |
|---|---|
| days | Между −999999999 and 999999999 включительно |
| seconds | Между 0 и 86399 включительно |
| microseconds | Между 0 и 999999 включительно |
Поддерживаемые операции
| Операция | Результат |
|---|---|
| t1 = t2 + t3 | Суммирует дельту между датами |
| t1 = t2 — t3 | Разница дельт между датами |
| t1 = t2 * i or t1 = i * t2 | Умножение дельты на целое число |
| t1 = t2 * f or t1 = f * t2 | Дельта умножается на число с плавающей точкой |
| f = t2 / t3 | Деление общей длительности t2 на интервал t3. Возвращает объект с плавающей точкой |
| t1 = t2 / f or t1 = t2 / i | Дельта делится на число с плавающей точкой или целое |
| t1 = t2 % t3 | Остаток часть вычисляется как объект timedelta |
| q, r = divmod(t1, t2) | Вычисляет частное и остаток: q = t1 // t2 (3) и r = t1% t2. q — целое число, а r — объект deltatime |
| +t1 | Возвращает объект timedelta с полностью идентичным значением t1 |
| —t1 | возвращает объект timedelta с полностью противоположным значением t1 |
| abs(t) | возвращает объект timedelta с положительным значением всех свойств t |
| str(t) | возвращает строковое представление объекта a в формате, заданном по умолчанию |
| repr(t) | возвращает строковое представление объекта a в формате с отрицательными значениями |
timedelta.total_seconds()
Возвращает общее количество секунд, содержащихся в продолжительности. Эквивалентно (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10 * 6)/10 * 6 рассчитано с включенным истинным делением. Пример:
datetime.tzinfo
абстрактный базовый класс для информации о временной зоне (например, для учета часового пояса и/или летнего времени).
Методы класса datetime:
datetime.combine(date, time)
объект datetime из комбинации объектов date и time.
datetime.fromtimestamp(timestamp)
дата из стандартного представления времени.
datetime.fromordinal(ordinal)
дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.
Класс date в Python
Класс date в Python является частью модуля datetime. Объект представляет дату (год, месяц и день) в календаре. 1 января года 1 называется днем номер 1, 2 января года 1 называется днем номер 2 и так далее.
Мы можем создать экземпляр даты, используя следующий заводской метод.
Все аргументы являются обязательными и должны быть целым числом в допустимом диапазоне.
Значение года должно находиться в диапазоне 1-9999, месяц – в диапазоне 1–12, а день – в диапазоне допустимых дней в данном месяце года.
Текущая дата и время в Python
Время и дата играют важнейшую роль при решении определенных задач в программировании. Разработчику на Python приходится нередко использовать точные значения текущей (current) даты, к примеру, при сохранении информации в базе данных, вычислениях, регистрации, обеспечении доступа и т. д. В этой статье пойдет разговор о том, как узнать текущие временные значения с помощью модуля datetime. Вдобавок к этому, читатель узнает о временных настройках для разных часовых поясов и преобразовании объектов datetime в метки времени Unix.
Получаем текущую дату и время
Datetime включает в себя разные классы, позволяющие получать нужные временные данные:
- datetime.date: день, месяц и год;
- datetime.time: время в часах, минутах, секундах, а также микросекундах. Тут дата значения не имеет;
- datetime.datetime: здесь хранятся атрибуты date и time.
Для примера можно вывести в терминал текущую (current) дату и время. Можно воспользоваться объектом datetime.datetime — из него довольно просто извлекаются объекты date и time. Сначала следует импортировать требуемый модуль:
from datetime import datetime
Да, это выглядит странновато, т. к. речь идет о получении класса datetime из модуля datetime, однако это 2 разные вещи. Далее следует воспользоваться функцией now() — она позволит получить объект с текущим временем и датой.
from datetime import datetime
Набрав код выше, вы увидите на экране следующее (в вашем случае вывод изменится, ведь минуты не стоят на месте):

Что произошло? Функция now() отобразила объект, причем с датой и временем создания этого самого объекта. В результате была выведена соответствующая строка. Однако никто не мешает получить временные атрибуты отдельно:

Таким образом, метод now() вполне годится для получения текущей даты и времени. Но что делать, если надо получить лишь дату?
Работа с датой current
Существуют 2 способа получения текущей даты. Первый выводит нужные данные из объекта datetime посредством метода date() :

Во втором применяется метод today() класса date:

Класс datetime.date позволяет получать календарную дату. Также следует добавить, что его атрибуты (year, month, day) бывают доступны и отдельно, как в примере с datetime.

Тут все понятно и просто. Но есть нюанс: если надо получить день недели, прописывают current_date.weekday()+1 . Дело в том, что нумерация дней недели начинается с нуля, то есть понедельник — это 0, вторник — 1, среда — 2 и так далее. Если такое положение вещей устраивает, +1 можно и не добавлять.
А как поступить, если надо отобразить текущее время отдельно от даты?
Работаем с текущим временем
Текущее время от объекта datetime получают посредством метода time() . Вот как это выглядит:

Здесь отдельно получить часы, минуты, секунды и микросекунды не представляется возможным, да в этом и нет необходимости, т. к. само понятие времени суток не предполагает другого отображения.
Важно отметить, что есть возможность получить временные данные и с учетом нужного часового пояса (timezone). Как и что используется, поговорим ниже.
Другой часовой пояс: временные зоны (timezones)
Метод now() принимает в Python временную зону в качестве аргумента, так что объект datetime генерируется соответствующим образом.
Для получения информации с учетом часового пояса необходимо задействовать библиотеку pytz (если ее нет, потребуется инсталляция, для чего подойдет команда pip3 install pytz ).
Так как я нахожусь в Минске, давайте получим текущие временные значения (times) именно для Минска:

Строка в коде minsk_current_datetime является объектом datetime, то есть все то же самое, что и ранее, но уже в полном соответствии с часовым поясом Республики Беларусь.
Когда надо узнать время в UTC, тоже пригодится модуль pytz:

Получить время UTC можно и без модуля pytz, т. к. datetime имеет полезное свойство timezone. Что же, давайте задействуем свойство timezone:

Таким образом, можно без проблем преобразовать текущие даты и значения времени в различные часовые пояса.
Преобразование временных меток
Также может быть очень полезным преобразовывать время в один из самых широко применяемых форматов в вычислениях. Речь идет о временных метках Unix.
Доподлинно известно, что компьютерные системы измеряют время не так, как люди. Здесь за основу берется число секунд, которые прошли с начала Unix-эпохи, то есть с 00:00:00 UTC 1.01.1979. Базы данных, протоколы и приложения обычно задействуют временную метку.
Для ее получения в «Питоне» пригодится модуль time, следовательно, первая строка будет import time :

Функция time.time() возвращает пользователю число с плавающей запятой и с временной меткой Unix.
На этом все. Очень надеемся, что вы получили некоторое представление об использовании встроенных Python-библиотек и модулей, необходимых для отображения временных значений.
Модуль datetime в Python: как работать с датой и временем

Информация о дате в Python — это не отдельный тип данных. Поэтому для выполнения операций с датой и временем используется модуль datetime . Вначале нужно его импортировать — это даст возможность работать с датами как с объектами отдельного типа.
Как вывести подробную текущую дату
Этот код отображает сведения о текущем времени и выводит на экран подробную дату вплоть до микросекунд:
Создание конкретной даты
Для создания конкретной даты используется класс datetime() одноименного модуля . Класс datetime() определяется тремя аргументами для создания даты: год, месяц, день. Давайте посмотрим, как это выглядит в коде:
Функция strftime()
Функцию strftime() используют для преобразования объектов даты и времени в их строковое представление. Этот значительно упрощает настройку формата времени и даты при выводе на экран.
Как вывести на экран год и день недели с помощью strftime()
| Параметр метода strftime() | Описание | Пример |
| %a | День недели сокращенно | Wed |
| %A | День недели | Wednesday |
| %w | Номер дня недели, начиная с Sunday — 0, Monday — 1… | 3 |
| %d | День месяца | 15 |
| %b | Название месяца |
Актуальная дата
В случае, когда нужно получить и настроить значение актуальной даты, задействуется класс date :
В консоли отобразится следующий формат даты:
Актуальное время
Для получения текущего времени нужно вернуть данные про актуальную дату и время, после чего извлечь информацию про время с помощью метода time :
С помощью атрибутов модуля datetime можно получать разные версии отображения времени. Применим функцию dir() и укажем нужный атрибут:
Если есть необходимость работать со временем как с объектом, применим класс time модуля datetime . Структура класса описывается следующим образом: datetime.time(hour, minutes, seconds) .
Создать новую дату
Чтобы создать новую дату, воспользуемся синтаксисом datetime.datetime(year,month,day) :
Определить временной промежуток
Для определения временного промежутка используется атрибут timedelta() . Объект timedelta выглядит вот так:
Расстояние между датами
Используемые нами аргументы опциональны, по умолчанию они приравниваются нулю. Это целые числа или числа с плавающей запятой. Они могут быть с плюсом или минусом, благодаря чему можно вычислять временной промежуток между двумя значениями:
Обращаясь к timedelta , можно выполнять разные математические операции. Например, вы можете добавлять дни, минуты, секунды, часы, недели к объекту datetime.date или datetime.datetime :
Поскольку аргументы timedelta по умолчанию установлены в ноль, у нас есть возможность использовать их выборочно, что позволяет добавлять, скажем, только минуты:
Сравнение дат
Также можно сравнить даты. Например:
Операции с часовыми поясами
В Python cуществует два типа данных, содержащих информацию о времени: абсолютные ( naive ) и относительные ( aware ).
Они отличаются тем, что в случае с абсолютными датами ( naive ) информация о временном поясе не учитывается. В случае же с относительными ( aware ) информация про временной пояс передается и также учитывается летнее время. Соответственно, абсолютные данные удобнее для работы.
Отличия между основными стандартами времени
- GMT (Greenwich Mean Time — среднее время по Гринвичу или гринвичское время) — это официальный часовой пояс, используемый в некоторых странах Европы и Африки. Например, местное время для Берлина 2020–10–17 09:40:33.614581+02:00 GMT. Время в Санкт-Петербурге на 3 часа опережает время в GMT.
Как создать простой aware-объект datetime, учитывающий часовой пояс
Один из недостатков библиотеки datetime Python — отсутствие поддержки часовых поясов. В случае, когда нужно учитывать часовой пояс, используется другая библиотека – pytz . В первой строке кода эту библиотеку также нужно импортировать. Предположим, что нам необходимо задать время в столице Кении — Найроби: