Как использовать объект timedelta для работы с датами в Python

Зачем нам нужен объект timedelta?

При работе с датой и временем в Python вам достаточно часто придется иметь дело с модулем datetime. В данной статье мы поговорим о том, как использовать объект timedelta модуля datetime в Python для работы с датами. Данный объект указывает на промежуток времени и используется, когда нам нужно выполнить простые арифметические операции с объектами datetime.

clock 012

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

  1. Создавать базовый объект timedelta
  2. Выводить текущую дату и время
  3. Рассчитывать дату в будущем
  4. Рассчитывать дату в прошлом
  5. Вычислять время, прошедшее с момента определенного события, или время, оставшееся до наступления определенного события.

Необходимые импорты

Прежде чем приступить к выполнению перечисленных выше задач, давайте сначала импортируем необходимые модули, как показано во фрагменте кода ниже:

# Import Necessary Modules
from datetime import date
from datetime import time
from datetime import datetime
from datetime import timedelta

Как создать базовый объект timedelta в Python

Для начала давайте создадим базовый объект timedelta:

time_delt1 = timedelta(days=270, hours=9, minutes=18)
print(time_delt1)

# Пример вывода
# 270 days, 9:18:00

Итак, мы успешно создали объект timedelta. Теперь нам нужно создать «эталонное» время, чтобы можно было применить созданный нами объект timedelta для выполнения каких-нибудь арифметических действий. Сделаем это на следующем шаге.

Как вывести текущую дату и время в Python

Прежде чем проводить какие-либо вычисления, давайте зададим отправную точку. К примеру, возьмем текущую дату.

Получить текущую дату и время можно при помощи вызова метода now() объекта datetime, как показано во фрагменте кода ниже:

time_now = datetime.now()
print(time_now)

# Пример вывода
# 2021-06-22 17:49:18.574503

Как рассчитать дату в будущем в Python

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

Чтобы вычислить будущий момент времени, нам нужно только добавить диапазон, определенный объектом timedelta, к текущему времени.

future_date1 = time_now + time_delt1
print(future_date1)

# Пример вывода
# 2022-03-20 03:07:18.574503

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

future_date2 = time_now + timedelta(days=189)
print(future_date2)

# Пример вывода
# 2021-12-28 17:49:18.574503

Как рассчитать дату в прошлом в Python

Как вы уже, наверное, догадались, чтобы узнать, какой день был 189 дней назад, нам нужно только заменить «+» на «-» в приведенном выше примере. Вот как это выглядит:

past_date1 = time_now - timedelta(days=189)
print(past_date1)

# Пример вывода
# 2020-12-15 17:49:18.574503

Как рассчитать прошедшее или оставшееся время в Python

Давайте теперь посчитаем, сколько времени осталось до Дня учителя в этом году в России отмечается 05 октября). Сделать это можно следующим образом. Чтобы вычислить с учетом сегодняшнего дня, мы можем вызвать метод today() объекта date для получения сегодняшней даты.

Синтаксис: today = date.today() # Возвращает сегодняшнюю дату

teachers_day = date(time_now.year, 10, 5)
today = date.today()

Затем мы можем узнать, сколько дней осталось до Дня учителя, используя следующий фрагмент кода:

time_to_td = teachers_day - today
print(f"Teachers' day is {time_to_td.days} days away")

# Пример вывода
# Teachers' day is 105 days away

Также возможно, что в этом году День учителя пройдет к тому времени, когда вы прочтете эту статью ?. Если День учителя в этом году уже прошел, сделайте следующее:

  1. Обновите интересующую дату на дату Дня учителя в следующем году.
  2. Подсчитайте, сколько дней осталось до Дня Учителя в следующем году.

Это показано в следующем фрагменте кода:

if teachers_day < today:
   print(f"This year's Teachers' Day was {(today-teachers_day).days} days ago")
   teachers_day = date(time_now.year + 1, 10, 5)
   time_to_td = teachers_day - today
   print(f"Next year's Teachers' day is {time_to_td.days} days away")

Заключение

Итак, мы разобрали, как применять объект timedelta для работы с датами в Python. Поговорили о том, как его использовать для выполнения простых арифметических действий с датами и для вычисления прошлой и будущей даты. Мы также теперь умеем рассчитать время, прошедшее с момента определенного события, или время, оставшееся до определенного события.

Надеемся, вы нашли эту статью полезной. Спасибо за чтение!