Як перетворити рядок на дату і час у Python

Перетворення з одного типу даних на інший тип даних має вирішальне значення для будь-якої мови програмування. Майже всі мови програмування підтримують перетворення типів для вбудованих типів даних.

Спеціальні типи даних, такі як datetime, потребують додаткових модулів для перетворення. Нам потрібні модулі, особливо для перетворення дати й часу, оскільки робота з ними ніколи не була легкою для програмістів. На щастя, Python має вбудовані модулі для роботи з datetime.

Ми навчимося перетворювати рядок datetime в об’єкт datetime у Python за допомогою різних модулів. Перш ніж перейти до цього, давайте подивимося, чому нам взагалі потрібно його конвертувати.

Чому нам потрібно перетворити рядок datetime на об’єкт datetime?

Коли нам доводиться працювати з датами, це нелегко працювати, якщо вони в рядковому форматі. Перетворення їх у формат дати й часу спрощує роботу з ними. Дати в рядках схожі на звичайні рядки. Він не матиме спеціальних методів роботи з датами. Він матиме загальні рядкові методи, які нам не знадобляться під час роботи з датами.

Скажімо, ми повинні порівняти дві дати. Якщо вони в рядковому форматі, ми можемо їх правильно порівняти. Якщо вони мають формат дати й часу, ми можемо використовувати оператори порівняння, як числа.

Це лише один сценарій, коли перетворення у формат дати й часу полегшує роботу. Існує багато сценаріїв, як-от додавання дат, віднімання, обробка часових поясів тощо, де перетворення рядка datetime в об’єкт datetime робить наше життя легшим, ніж будь-коли.

З огляду на це, давайте розглянемо різні способи перетворення рядка datetime в об’єкт datetime. Ми будемо використовувати вбудовані модулі datetime і сторонні модулі dateutil для перетворення рядка datetime в об’єкт datetime. Почнемо з модуля datetime

  Як рутувати Nokia X, встановити Play Store і Google Now Launcher

Використання дати і часу

Datetime — це вбудований модуль Python, який використовується для роботи з датами та часом. У цьому модулі є багато класів, які допомагають нам працювати з датами та часом. Для перетворення ми будемо використовувати клас datetime.datetime.

Datetime.datetime має багато методів. Нас цікавить метод strptime, який допоможе нам у конвертації. Давайте перевіримо.

datetime.strptime

Метод datetime.strptime використовується для перетворення рядка datetime в об’єкт datetime. Для цього потрібні два рядки: один — це рядок дати й часу, а інший — це формат цього рядка дати й часу. І він повертає об’єкт datetime.

Давайте розглянемо приклад

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

Якщо ви запустите наведений вище код, ви побачите такий результат.

2022-12-19 21:37:56

Ми взяли рядок datetime і перетворили його на об’єкт datetime за допомогою методу datetime.strptime. Переконайтеся, що формат, який ви надаєте методу, точно відповідає рядку datetime. Якщо вони не збігаються, ви можете отримати помилку або неправильний результат.

Ми використали деякі коди форматування для формату дати й часу. Ви можете звернутися до всіх кодів формату в документах.

Метод datetime.strptime повертає повну дату й час. Якщо ви хочете отримати дату й час окремо, ми можемо використати методи дати й часу об’єкта datetime. Давайте подивимось код.

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"

## getting date separately
print("Date:", datetime.strptime(string, formatting).date())

## getting time separately
print("Time:", datetime.strptime(string, formatting).time())

Запустіть наведений вище код, і ви побачите наступний результат.

Date: 2022-12-19
Time: 21:37:56

Методи date і time повертатимуть свої об’єкти відповідно. Вони знову матимуть свої відповідні методи для дат і часу.

  15 фотографічних термінів, про які ви не знаєте, але боїтеся запитати

Ми надали правильні рядки та формати для методу datetime.strptime, які ми бачили вище. Якщо ми надали їх неправильно, ми отримаємо помилки. Давайте подивимося, як усунути ці помилки. Запустіть наступний код.

from datetime import datetime

string = "19:12:2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

Наведений вище код викличе помилку, оскільки форматування не відповідає рядку дати й часу. Щоб усунути такі помилки, ми можемо використати спробу Pythons. Давайте додамо його.

from datetime import datetime

try:
    string = "19:12:2022 09:37:56 PM"
    formatting = "%d-%m-%Y %I:%M:%S %p"
    print(datetime.strptime(string, formatting))
except ValueError as error:
    print(error)

Тепер запустіть код ще раз. Ви побачите таке повідомлення про помилку, не порушуючи код.

time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'

Так само ми можемо додати метод try-except для наступного методу parser.parse. Це допомагає нам уникнути зламу коду посередині. Це не пов’язано спеціально з контекстом цього підручника, але воно нагадає вам про використання цього у вашому коді.

Ось і все для модуля datetime. Переходимо до наступного модуля dateutil.

Використання dateutil

Модуль dateutil надає розширення для модуля datetime. Це значно полегшує роботу з датами та часом завдяки багатьом простим у використанні методам. Давайте встановимо модуль за допомогою такої команди.

pip install python-dateutil

Нас цікавить метод dateutil.parser.parse. Давайте подивимося, як перетворити рядок datetime в об’єкт datetime.

parser.parse

Метод parser.parse візьме рядок datetime і перетворить його у відповідний формат об’єкта datetime. Нам не потрібно надавати жодного форматування для цього методу. Він автоматично перетворить заданий рядок datetime в об’єкт datetime. Давайте розглянемо приклад.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print(parser.parse(string))

Якщо ви запустите наведений вище код, ви побачите такий результат.

2022-12-19 21:37:56

Рядок datetime має бути в певному форматі, який приймає метод parser.parse. Це видасть помилку, якщо формат рядка дати й часу не відповідає бажаному формату. Ви можете перевірити всі формати рядків дати й часу, які він приймає для автоматичного перетворення.

  Як перезапустити свій острів у «Animal Crossing: New Horizons»

Оскільки метод parser.parse повертає об’єкт datetime, ми можемо отримати доступ до об’єктів дати та часу окремо, як ми бачили з модулем datetime. Давайте подивимось код.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print("Date:", parser.parse(string).date())
print("Time:", parser.parse(string).time())

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

Date: 2022-12-19
Time: 21:37:56

Як бачите, dateutil полегшує порівняльну роботу з датами та часом. Ви можете ознайомитися з модулем у документах.

Висновок

Ми використали один вбудований модуль і один сторонній модуль для перетворення рядка datetime в об’єкт DateTime. Існує ще один вбудований модуль під назвою time, за допомогою якого ми можемо перетворити рядок datetime в об’єкт DateTime, подібний до модулів datetime і dateutil. Спробуйте самі. Це не складе труднощів, оскільки ви вже робили подібне з іншими модулями.

Може бути більше бібліотек, за допомогою яких ми зможемо досягти того ж. Модулі, які ми використали в цьому підручнику, стандартні та широко використовуються. Ви можете дізнатися більше про інші модулі та вибрати найкращий, який вам підходить.

Ви також можете дослідити, як розрахувати різницю в часі в Python.

Щасливого кодування 🙂