Баннер мобильный (3) Пройти тест

Модуль datetime: управляем временем в Python

Как узнать, который час, и посчитать временной промежуток

Разбор

1 апреля 2025

Поделиться

Скопировано
Модуль datetime: управляем временем в Python

Содержание

    Чтобы работать с форматом даты и времени, в языке программирования Python есть специальный модуль datetime. Он стандартный и встроен в язык, его не нужно скачивать и устанавливать отдельно. С его помощью разработчики узнают текущее время, вычисляют разницу между датами и делают многое другое.

    Рассказываем, как устроен модуль datetime, какие возможности в него входят и какие операции над датой и временем он позволяет проводить.

    Что входит в модуль datetime

    Модуль datetime в Python содержит несколько основных компонентов:

    • date — дата;
    • time — время;
    • datetime — и дата, и время;
    • timedelta — временной интервал;
    • tzinfo — информация о часовых поясах.

    Класс datetime называется так же, как модуль целиком, не перепутайте. Мы будем разделять между собой понятия класса и модуля.

    Чтобы пользоваться компонентами модуля, его сперва нужно подключить к программе. Для этого достаточно написать в начале программы строку:

    import datetime

    После этого можно вызывать методы и создавать объекты классов, которые есть в модуле. А еще — возвращать дату и время, записывать их в переменные и проводить над ними арифметические операции. 

    Разберем подробнее, что позволяет делать каждый из компонентов.

    datetime.date в Python: как получить дату и работать с ней

    Класс date позволяет создать объект, в котором хранится какая-либо дата — сегодняшняя или произвольная. Потом с этим объектом можно работать: передавать куда-то или вычислять. 

    Как создать объект с датой

    Это можно сделать тремя способами.

    Передать конкретную дату. В этом случае в конструктор класса нужно передать три параметра: год, месяц и день. Например, код ниже создает объект с датой 15 февраля 2025 года и записывает эту дату в переменную feb:

    feb = datetime.date(2022, 02, 15)

    Получить сегодняшнюю дату. Для этого не нужно писать конкретные цифры — программу могут запускать в разные дни, и актуальная информация будет меняться. Вместо этого можно использовать специальный метод today():

    today_date = datetime.date.today()

    В переменную today_date передастся текущая дата. Например, если запустить этот код 25 марта 2025 года, именно эта дата запишется в today_date.

    Использовать timestamp. Так называется временная метка Unix — количество секунд, которое прошло с 1 января 1970 года по времени UTC. Это количество можно сконвертировать в дату: в Python для этого есть метод fromtimestamp(). Выглядит это так:

    some_date = datetime.date.fromtimestamp(3486970)

    В переменную some_date запишется дата, актуальная в тот момент, когда с 1 января 1970 года прошло 3486970 секунд.

    Как вывести дату на экран

    Вывести дату в Python можно с помощью стандартной функции print(). Можно вывести на экран переменную, в которой сохранена дата, или сразу передать в функцию print() вызов какого-то из методов. Например, так:

    print(datetime.date.today())

    На экране появится сегодняшняя дата. Такой же результат получился бы, если бы в функцию print() передали переменную today_date из примера выше.

    Как получить день, месяц или год

    Из даты можно извлечь ее составляющие — атрибуты, которые хранятся в объекте класса date:

    • year — год;
    • month — месяц;
    • day — день.

    Например, этот код выведет на экран год даты, записанный в переменной some_date:

    print(some_date.year)

    После слов year, month и day не ставим круглые скобки (), потому что это не методы — то есть не функции. Это атрибуты — переменные, которые принадлежат объекту класса.

    У атрибутов могут быть только значения, которые соответствуют реально возможным числам даты. Например, в атрибуте day может храниться число от 1 до 31, а в атрибуте month — от 1 до 12. Интереснее дела обстоят с годом: его значение находится в диапазоне от 1 до 9999. 

    То есть технически Python дает возможность работать с датами из далекого будущего, вплоть до сотого века нашей эры.

    datetime.time: как работать с временем

    Для хранения времени в модуле datetime есть отдельный класс — time. Объект этого класса создается примерно так же, как объект с датой, но есть особенности.

    Если вызвать конструктор класса time без параметров, задается нулевое время: 0 часов, 0 минут и 0 секунд. Выглядеть это будет так:

    null_time = datetime.time()

    Чтобы задать конкретное время, нужно передать параметры: часы, минуты и секунды. По желанию можно добавить четвертый параметр — микросекунды. Если не добавлять его, количество микросекунд будет равно нулю.

    Например, этот код задает переменной some_time значение времени 11 часов 45 минут 15 секунд:

    some_time = datetime.time(11, 45, 15)

    В объекте класса времени точно так же хранятся атрибуты, к которым можно обращаться напрямую:

    • hour — часы;
    • minute — минуты;
    • second — секунды;
    • microsecond — микросекунды.

    Например, вывести на экран количество секунд во времени, записанном в переменной some_time, можно так:

    print(some_time.second)

    У значений атрибутов опять же есть ограничения. Они не могут быть отрицательными, количество часов не должно превышать 23, а количество минут и секунд должно быть не больше 59. Если при сложении или вычитании получится большее число, время автоматически скорректируется.

    То есть если прибавить ко времени 23:59 две минуты — получится время 0:01.

    datetime.datetime — и дата, и время

    Этот класс — комбинация двух предыдущих. Он одновременно хранит и дату, и время. Работать с ним можно по тому же принципу, что с date или time, но есть и особенности.

    При создании объекта этого класса в него можно передать целых семь параметров: год, месяц, день, часы, минуты, секунды и миллисекунды. Первые три параметра обязательны: дата не может быть нулевой, в отличие от времени. Остальные четыре указываются по желанию.

    Например, этот код создает объект с датой и временем 25 июля 2005 года, 12 часов 33 минут 40 секунд:

    date_and_time = datetime.datetime(2005, 7, 25, 12, 33, 40)

    Кроме того, в классе datetime есть метод, позволяющий задать текущие дату и время, — now(). Вот как это выглядит:

    current = datetime.datetime.now()

    Текущую дату и время Python берет из настроек компьютера. То есть если установить на устройстве неверную дату — такую же неверную дату вернет метод now().

    Из объекта можно извлечь дату или время — для этого есть методы date() и time(). Например, этот код выведет на экран время из переменной current:

    print(current.time())

    В отличие от обращения к атрибутам, date() и time() — методы. Поэтому они пишутся с круглыми скобками () после названия. Кроме того, есть метод timestamp() — он возвращает временную метку.

    datetime.timedelta: временные промежутки и интервалы

    В модуле datetime есть отдельный класс timedelta. Он хранит временные интервалы и полезен, например, для арифметических операций с временем или расчетов даты. 

    Создать объект класса timedelta можно самостоятельно — передать параметры, которых у него довольно много. Это дни, секунды, микро- и миллисекунды, минуты, часы, недели и многое другое. Чтобы не запутаться, можно отдельно прописывать имя каждого параметра при создании объекта:

    some_interval = datetime.timedelta(days = 1, seconds = 5, microseconds = 0, milliseconds = 0, minutes = 15, hours = 2, weeks = 3)

    Этот код создаст интервал длиной три недели, один день, два часа, 15 минут и пять секунд.

    Второй вариант получить временной промежуток — провести арифметическую операцию с объектами классов date или time. Например, вычесть одно время из другого, чтобы найти разницу между ними.

    Допустим, есть два объекта класса datetime — A и B. Время A — 15:45, время B — 15:40. Если вычесть B из A, результатом будет объект класса timedelta — интервал длиной 5 минут. С датами принцип тот же.

    С помощью timedelta можно вычислять будущие и прошлые даты или время. Объекты этого класса подходят для арифметических операций с объектами datetime или с другими объектами timedelta.

    А вот использовать timedelta в арифметических операциях с объектами time нельзя. Невозможно прибавить к текущему времени час — Python выдаст ошибку. 

    Как изменить формат даты и времени

    Дату и время можно представлять по-разному. Самый простой пример — запись: в России обычно используют формат день.месяц.год, а в Америке — месяц.день.год. Python позволяет выводить и дату, и время по-разному, в том числе писать название месяца словами или менять местами атрибуты. Для этого в модуле datetime есть два метода:

    strftime(). Он создает из объекта класса date, time или datetime форматированную строку. Выглядит это так:

    print(datetime.now().strftime("%m/%d/%Y, %H:%M:%S"))

    Этот код выведет дату и время в формате «месяц/день/год, часы:минуты:секунды». Результат работы strftime() будет строкой.

    Знаки процента и буквы в скобках после strftime — это так называемые коды формата. Каждый код означает какой-то из атрибутов. Например, %m — месяц, а %H — час. Подставлять их в strftime() можно в разном порядке — и получать разные форматы даты и времени.

    strptime(). Этот метод действует ровно наоборот: превращает строку в объект класса datetime. Например, так:

    date_from_string = datetime.strptime(“21 November, 2001”, "%d %B, %Y")

    Первым аргументом в strptime() передают строку с датой, написанной в произвольном формате. Вторым аргументом — строку с кодами формата. 

    Код %B означает месяц, который записан словом. Его можно использовать, чтобы считывать или выводить дату в привычном нам формате.

    Как работать с часовыми поясами

    В модуле datetime есть отдельный инструментарий для изменения часовых поясов. Но информация о них есть не в любом объекте даты или времени.

    • По умолчанию дата и время в Python не содержат информацию о временных зонах. Такие объекты называются naive. До этого мы рассматривали работу только с ними.
    • Кроме naive, бывают дата и время, которые называются aware. Они содержат информацию о часовом поясе, а также о возможном переходе на летнее время.

    Временную зону в Python тоже можно представить по-разному. Аббревиатура GMT означает привычное обозначение часового пояса, DMT — переход на летнее время. Но в программировании удобнее пользоваться стандартом UTC: он координирует временные зоны во всем мире.

    Чтобы создать объект с заданным часовым поясом, нужно передать ему информацию о временной зоне. Список временных зон находится в отдельном от datetime модуле — pytz. То есть сначала нужно подключить этот модуль к программе:

    import pytz 

    Затем сведения из модуля можно использовать, чтобы задать времени или дате часовой пояс. Сначала понадобится извлечь из pytz нужную временную зону:

    timezone_berlin = pytz.timezone("Europe/Berlin")

    А после этого создать объект класса datetime и передать в него информацию о временной зоне:

    berlin_time = datetime.datetime.now(timezone_berlin) 

    В переменную berlin_time запишутся текущие дата и время по часовому поясу Берлина.

    Коротко о модуле datetime

    • Модуль datetime в Python содержит информацию для работы с датой и временем. С его помощью можно создавать объекты, которые хранят время, дату или обе этих сущности.
    • В datetime есть возможность работать с временными промежутками — для этого в нем существует класс timedelta.
    • Модуль позволяет получить текущие дату и время или задать произвольные. Время также может быть нулевым, а вот дата — нет.
    • Дату и время можно представлять в разных форматах и в разных часовых поясах.

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии