Как рассчитать разницу во времени в Python

Опубликовано: 2022-01-23

При работе с датами и временем в Python вам часто нужно вычислять разницу во времени. В этом руководстве вы узнаете, как рассчитать разницу между двумя временными метками в часах, минутах и ​​секундах.

К концу этого урока вы узнаете:

  • как использовать модуль Python datetime для работы с датами и временем,
  • что такое объекты timedelta и чем они полезны, и
  • вычислить разницу во времени между любыми двумя метками времени — в часах, минутах и ​​секундах.

Давайте начнем.

Как использовать модуль даты и времени Python

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

 import datetime

Чтобы рассчитать разницу во времени, вам нужно создать две разные временные метки. Вы можете выбрать для создания:

  • два объекта date ,
  • два объекта time или
  • комбинация date и time — объекты datetime .

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

Давайте импортируем класс date из модуля datetime. Чтобы создать объект даты в Python, вы можете использовать общий синтаксис datetime.date(<year>,<month>,<day>) . Вот пример создания объекта date date1 :

 from datetime import date date1 = datetime.date(2022,3,27) print(date1) # Output: 2022-03-27

Вы можете попробовать код на компиляторе Geekflare Python для тестирования. Или установите Python на свой компьютер.

Как показано выше, когда вы печатаете дату, она форматируется в YYYY-MM-DD для дат.

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

Например, чтобы указать дату в июне, 6-м месяце года: используйте 6, а не 06.

Например, попробуйте запустить следующий фрагмент кода, где месяц указан как 03 , а не просто 3 . Вы увидите, что он выдает синтаксическую ошибку, как показано ниже:

 date1 = datetime.date(2022,03,27) print(date1) # Error Message File "<ipython-input-12-6eb72084e6ce>", line 1 date1 = datetime.date(2022,03,27) ^ SyntaxError: invalid token

Давайте теперь посмотрим, как создать объект time в Python.

Как создать объект времени в Python

Чтобы создать объект времени, давайте импортируем класс time . Любой объект времени Python можно создать, используя класс time , указав следующие атрибуты класса: hour , minute , second и microsecond .

Однако все эти атрибуты являются необязательными. Если вы не укажете определенный атрибут, скажем, second , по умолчанию он будет равен 0 .

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

 from datetime import time time1 = datetime.time(13,27,45,4600) print(time1) # Output: 13:27:45.004600

Как создать объект datetime в Python

Как видите, объект date не имеет информации о времени. И объект time не содержит информации о дате.

Однако на практике вам потребуется информация как о дате, так и о времени. Поэтому вместо этого рекомендуется использовать класс datetime .

Вы можете получить доступ к классу datetime и создать объекты datetime в Python, как показано ниже:

 dt1 = datetime.datetime(2022,3,27,13,27,45,46000) print(dt1) # Output: 2022-03-27 13:27:45.046000

Давайте теперь создадим еще один объект datetime dt2 без second атрибута. Вы можете видеть, что он установлен на 0 — значение по умолчанию.

 dt2 = datetime.datetime(2022,6,30,14,28) print(dt2) # Output: 2022-06-30 14:28:00

Итак, вы узнали, как создавать метки времени в Python — в виде даты, времени и даты и времени. Пришло время посмотреть, как можно вычислить разницу между любыми двумя временными метками.

Перейдите в следующий раздел, чтобы узнать.

Как использовать объект timedelta в Python

В Python timedelta обозначает промежуток времени. Это разница между двумя объектами date , time или datetime .

Если вы добавите или вычтете два объекта date , time или datetime , вы получите объект timedelta . Этот объект timedelta имеет полезные атрибуты и методы, которые могут помочь вычислить разницу во времени.

Давайте продолжим и вычислим разницу между двумя объектами datetime dt1 и dt2 .

 dt1 = datetime.datetime(2022,3,27,13,27,45,46000) dt2 = datetime.datetime(2022,6,30,14,28) tdelta = dt2 - dt1 print(tdelta) print(type(tdelta)) # Output 95 days, 1:00:14.954000 <class 'datetime.timedelta'>

Из приведенного выше фрагмента кода видно, что переменная tdelta содержит разницу во времени между dt1 и dt2 . И тип tdelta проверяется на принадлежность к классу timedelta с помощью встроенной в Python функции type() .

Теперь давайте закодируем другой пример.

Как найти разницу во времени между двумя датами

Возьмем простой, но интересный пример.

Задача : рассчитать разницу во времени между текущей датой (сегодня) и днем ​​рождения.
Для этого установите сегодня в качестве первой временной метки, а свой день рождения в качестве второй временной метки.

В качестве первого шага создадим два объекта datetime :

  • один на сегодня, давайте назовем это today , и
  • еще один на твой день рождения, назовем это bday

Класс datetime имеет метод now() , который дает вам текущую локальную дату и время. Так что давайте использовать это today — наша контрольная дата.

 today = datetime.datetime.now() print(today) # Sample Output: 2022-01-22 09:10:18.489538

В приведенном ниже коде замените bday на свой день рождения, чтобы рассчитать время, оставшееся до вашего дня рождения в этом году.

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

 bday = datetime.datetime(2022,8,30,11,59) print(bday) # Sample Output: 2022-08-30 11:59:00

Следующим шагом является вычисление time_diff , который является объектом timedleta , как объяснялось ранее. Просто bday today из дня рождения, и вы получите разницу во времени.

 time_diff = bday - today print(f"Your birthday is in {time_diff}") # Output Your birthday is in 220 days, 2:46:00.127416

Чтобы узнать количество оставшихся дней, используйте атрибут days в time_diff , как показано ниже:

 tdays = time_diff.days print(f"Your birthday is in {tdays} days.") # Output Your birthday is in 220 days.

Как найти разницу во времени в секундах

Давайте теперь посчитаем, сколько секунд осталось до вашего дня рождения.

Чтобы вычислить общую разницу во времени в секундах, используйте метод timedelta total_seconds() для объекта time_diff .

 tsecs = time_diff.total_seconds() print(f"Your birthday is {tsecs} seconds away.") # Output Your birthday is 19017960.127416 seconds away.

Ну, это слишком долго ждать!

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

Давайте теперь вернемся к некоторым основам и запишем следующее. В сутках 24 часа, в часе 60 минут, а в минуте 60 секунд.

Это кратко показано на изображении ниже:

Часы, минуты и секунды

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

Таблица преобразования времени

В следующих разделах давайте преобразуем разницу во времени в секундах в минуты и часы.

Как найти разницу во времени в минутах

Чтобы получить разницу во времени в минутах, вам нужно всего лишь разделить общее количество секунд на 60.

Давайте разделим tsecs на 60 и сохраним его в переменной с именем tmins , например:

 tmins = tsecs/60 print(f"Your birthday is {tmins} minutes away.") # Output Your birthday is 316966.0021236 minutes away.

Как найти разницу во времени в часах

Теперь, когда вы вычислили разницу во времени в минутах, вы можете разделить ее на коэффициент 60, чтобы получить разницу в часах. Или вы можете разделить общее количество секунд на 60 * 60 = 3600.

 thrs = tsecs/(60*60) print(f"Your birthday is {thrs} hours away.") # Output Your birthday is 5282.76670206 hours away.

Итак, вы научились вычислять разницу во времени в любых единицах измерения по вашему выбору.

Вывод

В этом уроке вы узнали, как:

  • создавать и работать с датами и временем, используя модуль даты и времени datetime ,
  • использовать объекты timedelta , чтобы получить промежуток времени или разницу во времени, и
  • вычислить разницу во времени в секундах, минутах и ​​часах.

Надеюсь, вы нашли этот урок полезным. Теперь, когда вы знаете все о расчете разницы во времени в Python, пришло время применить свои навыки на практике.

Удачного обучения и кодирования!

Узнайте, как написать равный или не равный код или сделать игру в змейку на питоне здесь.