При роботі з датами та часом у Python, доволі часто виникає потреба в обчисленні часових проміжків. У цьому мануалі ми розглянемо, як визначити різницю між двома часовими мітками, виражену в годинах, хвилинах та секундах.
Оволодівши матеріалом цього посібника, ви зможете:
- користуватися модулем Python
datetime
для маніпуляцій з датами та часом; - зрозуміти, що таке об’єкти
timedelta
та в чому полягає їхня корисність; - вираховувати часову різницю між двома довільними часовими мітками, перетворюючи результат в години, хвилини та секунди.
Перейдімо до справи.
Застосування модуля Python datetime
Для роботи з датами та часом у Python існує модуль datetime
. Цей модуль є складовою стандартної бібліотеки Python, тому його можна імпортувати без додаткових встановлень:
import datetime
Для обчислення часового проміжку, необхідно мати дві відмінні часові мітки. Їх можна створити у вигляді:
- двох об’єктів дати;
- двох об’єктів часу;
- або комбінації дати і часу – об’єктів
datetime
.
Створення об’єкта дати в Python
Імпортуємо клас date
з модуля datetime
. Для створення об’єкта дати в Python використовується конструкція datetime.date(<рік>, <місяць>, <день>)
. Наприклад, створимо об’єкт дати date1
:
from datetime import date date1 = datetime.date(2022,3,27) print(date1) # Output: 2022-03-27
Ви можете перевірити цей код, використовуючи онлайн-компілятор Python techukraine.net або встановивши Python на свій комп’ютер.
Зверніть увагу, що вивід дати має формат РРРР-ММ-ДД.
Важливо: Місяць слід вказувати як ціле число без початкового нуля. Зазвичай, ми звикли додавати нуль перед номером місяця при записі дати.
Наприклад, для представлення червня, шостого місяця року, використовуйте 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
Далі розглянемо, як створити об’єкт часу в Python.
Створення об’єкта часу в Python
Для створення об’єкта часу, імпортуємо клас time
. Об’єкт часу можна створити, використовуючи клас time
та вказавши такі атрибути: години, хвилини, секунди і мікросекунди.
Всі ці атрибути є необов’язковими. Якщо ви не вкажете певний атрибут, наприклад, секунду, вона за замовчуванням буде 0
.
Наступний приклад ілюструє, як можна створити об’єкт часу time1
. Подібно до об’єкта дати, ви можете вивести об’єкт часу на друк, щоб побачити його формат.
from datetime import time time1 = datetime.time(13,27,45,4600) print(time1) # Output: 13:27:45.004600
Створення об’єкта datetime
в Python
Об’єкт date
не зберігає інформацію про час, а об’єкт time
– про дату.
Однак на практиці часто потрібна комбінована інформація про дату та час. Тому рекомендується використовувати клас datetime
.
Доступ до класу datetime
та створення його об’єктів відбувається наступним чином:
dt1 = datetime.datetime(2022,3,27,13,27,45,46000) print(dt1) # Output: 2022-03-27 13:27:45.046000
Створимо ще один об’єкт datetime
, dt2
, без вказання секунд. Ви побачите, що їхнє значення буде 0
– за замовчуванням.
dt2 = datetime.datetime(2022,6,30,14,28) print(dt2) # Output: 2022-06-30 14:28:00
Отже, ми навчилися створювати мітки часу в Python – дати, час та їх комбінації. Настав час дізнатися, як обчислити різницю між двома часовими мітками.
Продовжимо в наступному розділі.
Використання об’єкта timedelta
в Python
У Python 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
. А вбудована функція Python type()
підтверджує, що tdelta
належить до класу timedelta
.
Розглянемо інший приклад.
Обчислення різниці в часі між двома датами
Розглянемо простий, але цікавий приклад.
Завдання: обчислити часову різницю між поточною датою та вашим днем народження.
Для цього встановіть поточну дату як першу часову мітку, а день народження – як другу.
Спершу створимо два об’єкти datetime
:
- один – для сьогоднішньої дати, назвемо його
today
; - другий – для вашого дня народження, назвемо його
bday
.
Клас datetime
має метод now()
, який повертає поточну локальну дату та час. Використаємо його для отримання поточної дати.
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
, який є об’єктом timedelta
, як зазначалося раніше. Віднімемо поточну дату від дати дня народження, щоб отримати різницю в часі.
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.
Обчислення різниці в часі в секундах
Тепер обчислимо, скільки секунд залишилось до вашого дня народження.
Для обчислення загальної різниці в часі в секундах, використовуйте метод total_seconds()
об’єкта timedelta
, яким є 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
Python; - використовувати об’єкти
timedelta
для отримання часового проміжку або різниці в часі; - обчислювати різницю в часі в секундах, хвилинах та годинах.
Сподіваємося, цей посібник був для вас корисним. Тепер, коли ви знаєте все про обчислення часових проміжків у Python, настав час застосувати свої знання на практиці.
Успішного навчання та програмування!
Дізнайтеся, як написати код для порівняння “дорівнює” або “не дорівнює” або створити гру “змійка” на python тут.