Як перетворити рядок на об’єкт datetime у Python? (Перетворення рядка на дату)

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

Модулі Python datetime і time містять метод strptime(). За його допомогою можна розбирати рядки з датами та перетворювати їх на об’єкти типу datetime або struct_time. Після перетворення можна легко отримати окремі елементи дати або виконувати різні операції, пов’язані з датами.

У цьому посібнику ви дізнаєтесь, як ефективно перетворювати рядок на дату у Python за допомогою методу strptime(). Крім того, ми розглянемо, як перетворити рядок на об’єкт datetime у Python. Почнімо!

Коди форматів для DateTime у Python

Перш ніж перейти до перетворення рядків у дати, варто зрозуміти коди форматування, які використовує модуль datetime. Ці коди є «будівельними блоками» для розбору й форматування дат і часу. Нижче наведено найуживаніші коди, з якими ви стикатиметеся:

%Y: позначає рік у діапазоні від 0001 до 9999.
%m: позначає місяць року, значення від 01 до 12.
%d: позначає день місяця, значення від 01 до 31.
%H: позначає годину у 24-годинному форматі, значення від 00 до 23.
%I: позначає годину у 12-годинному форматі, значення від 01 до 12.
%M: позначає хвилини години, значення від 00 до 59.
%S: позначає секунди хвилини, значення від 00 до 59.

Повний список кодів форматування можна знайти у документації Python у розділі «strftime() and strptime() Format Codes».

Перетворення рядка на об’єкт datetime у Python за допомогою datetime.strptime()

Метод datetime.strptime() має таку синтаксичну форму:

datetime.strptime(date_string, format)

Цей метод перетворює рядок із датою на об’єкт datetime відповідно до вказаного формату. Обидва аргументи — date_string і format — є обов’язковими та мають передаватися у вигляді рядків.

Приклад: перетворення рядка на об’єкт datetime.datetime()

Нижче наведено приклад, який демонструє, як перетворити рядок із датою та часом на об’єкт datetime.datetime. Також виводиться тип і значення отриманого об’єкта:

from datetime import datetime

# Example date and time string

datetime_str = '12/25/23 08:30:00'

# Convert the string to a datetime object

datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')

# Print the type and value of the datetime object

print(type(datetime_object))

print(datetime_object) # Output in the default format

datetime Object 1

Вихід:

datetime Object in Python2

Приклад: перетворення рядка на об’єкт datetime.date()

Нижче наведено приклад того, як перетворити рядок із датою на об’єкт datetime.date. Код виводить тип і значення отриманого об’єкта:

from datetime import datetime

# Example date string

date_str = '12-31-2023'

# Convert the string to a date object

date_object = datetime.strptime(date_str, '%m-%d-%Y').date()

# Print the type and value of the date object

print(type(date_object))

print(date_object) # Output in default format

datetime Object in Python 3

Вихід:

datetime Object in Python 4

Приклад: перетворення рядка на об’єкт datetime.time()

Цей приклад демонструє, як перетворити рядок із часом на об’єкт datetime.time. Тип і значення отриманого об’єкта виводяться на екран:

from datetime import datetime

# Example time string

time_str = '22::45::15'

# Convert the string to a time object

time_object = datetime.strptime(time_str, '%H::%M::%S').time()

# Print the type and value of the time object

print(type(time_object))

print(time_object)

datetime Object in Python 5

Вихід:

datetime Object in Python 6

Приклад: перетворення рядка на об’єкт datetime.time()

Цей приклад демонструє, як перетворити рядок із часом на об’єкт datetime.time. Тип і значення отриманого об’єкта виводяться на екран:

from datetime import datetime

import locale

# Set locale to French

locale.setlocale(locale.LC_ALL, 'fr_FR')

# Example French locale date string

date_str_fr_FR = '25-Décembre-2023 Lundi' # fr_FR locale

# Convert the string to a datetime object

datetime_object = datetime.strptime(date_str_fr_FR, '%d-%B-%Y %A')

# Print the type and value of the datetime object

print(type(datetime_object))

print(datetime_object)

datetime Object in Python 7

Примітка: об’єкт datetime.datetime() не зберігає назву дня тижня (Lundi у цьому прикладі) з вихідного рядка. Натомість він зберігає день тижня внутрішньо як числове значення.

Перетворення рядка на об’єкт struct_time за допомогою time.strptime()

Метод time.strptime() використовується для розбору рядка та перетворення його на об’єкт time.struct_time. Його синтаксис такий:

time.strptime(time_string[, format])

Цей метод повертає об’єкт time.struct_time, який відповідає заданим параметрам time_string і format. Аргумент time_string є обов’язковим, і обидва аргументи мають передаватися у вигляді рядків. Якщо формат не вказано, метод використовує формат за замовчуванням:

'%a %b %d %H:%M:%S %Y'

Це той самий формат, який повертає функція ctime(). Директиви форматування, що використовуються в time.strptime(), узгоджуються з тими, що застосовуються в time.strftime(). Докладніше про це можна дізнатися в офіційній документації Python до модуля time.

Приклад: перетворення рядка на об’єкт struct_time() із користувацьким форматом

Нижче наведено приклад перетворення рядка з часом на об’єкт time.struct_time за допомогою власного формату:

import time

# Example time string

time_str = '10::45::30'

# Convert to a struct_time object using a custom format

time_obj = time.strptime(time_str, '%H::%M::%S')

print("A time.struct_time object using the provided format:")

print(time_obj)

datetime Object in Python 8

Вихід:

datetime Object in Python 9

Примітка: під час перетворення на об’єкт time.struct_time будь-які не вказані директиви формату заповнюються стандартними значеннями-заповнювачами.

Приклад: перетворення рядка на об’єкт struct_time() із використанням формату за замовчуванням

Якщо формат не задано, метод time.strptime() застосовує формат за замовчуванням ('%a %b %d %H:%M:%S %Y'). Якщо вхідний рядок не збігається з цим форматом точно, буде згенеровано помилку.

import time

# Example time string matching the default format

time_str_default = 'Tue Mar 14 12:15:45 2023'

# Convert to a struct_time object using the default format

time_obj_default = time.strptime(time_str_default)

print("A time.struct_time object using the default format:")

print(time_obj_default)

datetime Object in Python 10

Примітка: як і в попередньому прикладі, під час перетворення рядка для будь-яких відсутніх директив формату використовуються стандартні значення-заповнювачі.

Як усунути помилки strptime()?

Під час використання методу strptime() виникає помилка ValueError, якщо вхідний рядок не відповідає очікуваному формату. Щоб коректно обробити такі помилки, можна застосувати блок try для перевірки розбору та блок except для перехоплення й виведення повідомлення про помилку. Повідомлення ValueError від strptime() чітко пояснюють причину збою розбору.

Нижче наведено приклад, який демонструє типові проблеми, як-от невідповідність формату або наявність зайвих даних:

from datetime import datetime

import time

# Example 1: Mismatched format for datetime

datetime_str = '05-25-2023 08:30:00'

try:

datetime_object = datetime.strptime(datetime_str, '%m/%d/%Y')

except ValueError as ve1:

print('Error 1:', ve1)

# Example 2: Invalid time string

time_str = '12:70:50'

try:

time_object = time.strptime(time_str, '%H:%M:%S')

except ValueError as ve2:

print('Error 2:', ve2) 

datetime Object in Python 11

Вихід:

datetime Object in Python 12

Висновки

У цьому посібнику ви дізналися, як перетворювати рядки на об’єкти date та datetime у Python за допомогою методу strptime(). Ви навчилися працювати з різними форматами, розбирати дати, час і навіть рядки, що залежать від локалі. Крім того, ви ознайомилися з поширеними помилками, такими як невідповідність формату, і з тим, як ефективно їх усувати.

Опрацювання перетворень рядків у дати — це ключова навичка для роботи з часовими даними в Python. Розуміння кодів форматів і правильне узгодження рядків із очікуваними форматами дає змогу впевнено виконувати операції з датами та часом у ваших проєктах.

Дякуємо за увагу! Сподіваємося, цей посібник допоможе вам упевнено працювати з потужними бібліотеками Python для роботи з датами та часом.

Покращуйте свій хостинг разом із Host-World! Насолоджуйтесь надійними VPS-планами від $7.5/місяць або відкрийте повну потужність виділених серверів від $99/місяць — усе це з цілодобовою професійною підтримкою. Підніміть свою онлайн-присутність на новий рівень уже сьогодні!

Залиште свої відгуки

Поділіться своїми думками та допоможіть нам покращитися! Ваш відгук важливий для нас.

Завантажте своє фото