Главная страница » Python преобразовать строку в дату

Python преобразовать строку в дату

Конечно! В Python для преобразования строки в объект даты и времени (дату и/или время) используется модуль datetime, а именно метод strptime().

Метод datetime. strptime()

Метод strptime() (string parse time) класса datetime принимает два основных аргумента:

Строка с датой/временем: Строка, которую вы хотите преобразовать. Формат строки: Строка, которая указывает strptime(), как интерпретировать входную строку. Это набор Кодов форматирования, которые соответствуют различным частям даты и времени.

Основные коды форматирования:

    %Y: Год с веком (например, 2023) %m: Месяц как десятичное число (01-12) %d: День месяца как десятичное число (01-31) %H: Час (24-часовой формат) как десятичное число (00-23) %M: Минута как десятичное число (00-59) %S: Секунда как десятичное число (00-59) %f: Микросекунда как десятичное число (000000-999999) %A: Полное название дня недели (например, ‘Monday’) %a: Сокращенное название дня недели (например, ‘Mon’) %B: Полное название месяца (например, ‘January’) %b: Сокращенное название месяца (например, ‘Jan’) %I: Час (12-часовой формат) как десятичное число (01-12) %p: Эквивалент ‘AM’ или ‘PM’ %c: Соответствующее представление даты и времени по умолчанию для локали %x: Соответствующее представление даты по умолчанию для локали %X: Соответствующее представление времени по умолчанию для локали %%: Символ ‘%’

Примеры преобразования строки в дату/время:

Python

From datetime import datetime
 
# Пример 1: Только дата (YYYY-MM-DD)
Date_string1 = "2023-10-26"
Date_object1 = datetime. strptime(date_string1, "%Y-%m-%d")
Print(f"Строка '{date_string1}' преобразована в: {date_object1}, Тип: {type(date_object1)}")
# Вывод: Строка '2023-10-26' преобразована в: 2023-10-26 00:00:00, Тип: <class 'datetime. datetime'>
 
# Пример 2: Дата и время (DD/MM/YYYY HH:MM:SS)
Date_string2 = "25/12/2024 14:30:00"
Date_object2 = datetime. strptime(date_string2, "%d/%m/%Y %H:%M:%S")
Print(f"Строка '{date_string2}' преобразована в: {date_object2}, Тип: {type(date_object2)}")
# Вывод: Строка '25/12/2024 14:30:00' преобразована в: 2024-12-25 14:30:00, Тип: <class 'datetime. datetime'>
 
# Пример 3: Месяц по названию, 12-часовой формат с AM/PM
Date_string3 = "Jan 15, 2023 09:00 AM"
Date_object3 = datetime. strptime(date_string3, "%b %d, %Y %I:%M %p")
Print(f"Строка '{date_string3}' преобразована в: {date_object3}, Тип: {type(date_object3)}")
# Вывод: Строка 'Jan 15, 2023 09:00 AM' преобразована в: 2023-01-15 09:00:00, Тип: <class 'datetime. datetime'>
 
# Пример 4: С микросекундами
Date_string4 = "2023-11-01 10:05:30.123456"
Date_object4 = datetime. strptime(date_string4, "%Y-%m-%d %H:%M:%S.%f")
Print(f"Строка '{date_string4}' преобразована в: {date_object4}, Тип: {type(date_object4)}")
# Вывод: Строка '2023-11-01 10:05:30.123456' преобразована в: 2023-11-01 10:05:30.123456, Тип: <class 'datetime. datetime'>
 
# Пример 5: Только время
Time_string = "18:45:15"
Time_object = datetime. strptime(time_string, "%H:%M:%S").time() # .time() чтобы получить только объект time
Print(f"Строка '{time_string}' преобразована в: {time_object}, Тип: {type(time_object)}")
# Вывод: Строка '18:45:15' преобразована в: 18:45:15, Тип: <class 'datetime. time'>

Обработка ошибок (ValueError)

Если формат входной строки не соответствует указанному формату, strptime() вызовет ошибку ValueError. Важно обрабатывать такие ситуации, особенно при работе с пользовательским вводом или внешними данными.

Python

From datetime import datetime
 
Wrong_format_string = "26-10-2023" # Ожидаем YYYY-MM-DD, а получили DD-MM-YYYY
 
Try:
 date_object = datetime. strptime(wrong_format_string, "%Y-%m-%d")
 print(f"Успешно преобразовано: {date_object}")
Except ValueError as e:
 print(f"Ошибка преобразования: {e}")
 print("Убедитесь, что формат строки соответствует ожидаемому.")
# Вывод: Ошибка преобразования: time data '26-10-2023' does not match format '%Y-%m-%d'
# Вывод: Убедитесь, что формат строки соответствует ожидаемому.

Работа с датами без указания времени

Если ваша строка содержит только дату, strptime() по умолчанию заполнит время нулями (00:00:00). Если вам нужен только объект date, вы можете вызвать метод. date() у полученного объекта datetime.

Python

From datetime import datetime
 
Date_only_string = "2023-01-01"
Datetime_obj = datetime. strptime(date_only_string, "%Y-%m-%d")
Date_obj = datetime_obj. date()
 
Print(f"Объект datetime: {datetime_obj}, Тип: {type(datetime_obj)}")
Print(f"Объект date: {date_obj}, Тип: {type(date_obj)}")

Заметка о pandas и dateutil

Для более сложных сценариев, например, когда формат даты может быть не строго фиксированным, или при работе с большими объемами данных (например, из CSV-файлов), стоит рассмотреть использование библиотек:

    Pandas: Для работы с табличными данными pandas имеет очень мощную функцию pd. to_datetime(), которая может автоматически определять форматы и более эффективно обрабатывать ошибки. Dateutil: Предоставляет более гибкий парсер, который может угадывать формат даты/времени из строки (но это медленнее и менее надежно, чем явное указание формата).

Но для большинства случаев, где формат известен и предсказуем, встроенный datetime. strptime() является отличным и эффективным решением. В Python для преобразования строки в объект даты и/или времени (тип datetime) используется метод Strptime() из модуля datetime.

Суть метода strptime() заключается в том, что вы должны точно указать Формат, в котором дата и время представлены в вашей строке. Это делается с помощью специальных Кодов форматирования.

Основные шаги:

Импортировать класс datetime из модуля datetime. Определить строку с датой/временем. Создать строку формата, используя коды форматирования, которые точно соответствуют структуре вашей строки. Вызвать datetime. strptime(ваша_строка, строка_формата).

Коды форматирования:

Вот некоторые из наиболее часто используемых кодов форматирования:

    %Y: Год с веком (например, 2023) %m: Месяц в виде двузначного числа (01-12) %d: День месяца в виде двузначного числа (01-31) %H: Час (24-часовой формат) (00-23) %M: Минуты (00-59) %S: Секунды (00-59) %f: Микросекунды (000000-999999) %I: Час (12-часовой формат) (01-12) %p: AM или PM (используется с %I) %b: Сокращенное название месяца (например, Jan, Feb) %B: Полное название месяца (например, January, February) %a: Сокращенное название дня недели (например, Mon, Tue) %A: Полное название дня недели (например, Monday, Tuesday) %j: День года (001-366) %w: День недели как десятичное число, где воскресенье — 0, суббота — 6. %z: Смещение UTC в формате +HHMM или — HHMM (например, +0200 для CEST). %Z: Название часового пояса (например, CET, CEST).

Примеры:

Пример 1: Простой формат даты (YYYY-MM-DD)

Python

From datetime import datetime
 
Date_str = "2023-10-26"
Date_format = "%Y-%m-%d"
 
Try:
 date_obj = datetime. strptime(date_str, date_format)
 print(f"Преобразованная дата: {date_obj}")
 print(f"Тип объекта: {type(date_obj)}")
Except ValueError as e:
 print(f"Ошибка при преобразовании: {e}")
 
# Вывод:
# Преобразованная дата: 2023-10-26 00:00:00
# Тип объекта: <class 'datetime. datetime'>

Пример 2: Дата и время (YYYY-MM-DD HH:MM:SS)

Python

From datetime import datetime
 
Datetime_str = "2023-10-26 14:35:00"
Datetime_format = "%Y-%m-%d %H:%M:%S"
 
Try:
 datetime_obj = datetime. strptime(datetime_str, datetime_format)
 print(f"Преобразованные дата и время: {datetime_obj}")
Except ValueError as e:
 print(f"Ошибка при преобразовании: {e}")
 
# Вывод:
# Преобразованные дата и время: 2023-10-26 14:35:00

Пример 3: Различные форматы даты

Python

From datetime import datetime
 
# Месяц/День/Год (MM/DD/YYYY)
Date_str_1 = "10/26/2023"
Date_format_1 = "%m/%d/%Y"
Date_obj_1 = datetime. strptime(date_str_1, date_format_1)
Print(f"Формат MM/DD/YYYY: {date_obj_1}")
 
# День-Месяц-Год (DD-MM-YYYY)
Date_str_2 = "26-10-2023"
Date_format_2 = "%d-%m-%Y"
Date_obj_2 = datetime. strptime(date_str_2, date_format_2)
Print(f"Формат DD-MM-YYYY: {date_obj_2}")
 
# Полное название месяца, День, Год
Date_str_3 = "October 26, 2023"
Date_format_3 = "%B %d, %Y"
Date_obj_3 = datetime. strptime(date_str_3, date_format_3)
Print(f"Полное название месяца: {date_obj_3}")

Пример 4: Время с AM/PM

Python

From datetime import datetime
 
Time_str = "02:30 PM"
Time_format = "%I:%M %p" # %I для 12-часового формата, %p для AM/PM
Time_obj = datetime. strptime(time_str, time_format).time() # .time() чтобы получить только объект time
Print(f"Преобразованное время (AM/PM): {time_obj}")
 
Datetime_str_ampm = "2023-10-26 09:15 AM"
Datetime_format_ampm = "%Y-%m-%d %I:%M %p"
Datetime_obj_ampm = datetime. strptime(datetime_str_ampm, datetime_format_ampm)
Print(f"Дата и время (AM/PM): {datetime_obj_ampm}")

Пример 5: Обработка ошибок

Если строка не соответствует указанному формату, strptime() вызовет исключение ValueError. Важно обрабатывать это, чтобы ваша программа не падала.

Python

From datetime import datetime
 
Wrong_date_str = "26/10/2023" # Ожидается YYYY-MM-DD
Expected_format = "%Y-%m-%d"
 
Try:
 date_obj = datetime. strptime(wrong_date_str, expected_format)
 print(f"Преобразованная дата: {date_obj}")
Except ValueError as e:
 print(f"Ошибка: Неверный формат даты. Ожидался '{expected_format}', получено '{wrong_date_str}'.")
 print(f"Детали ошибки: {e}")
 
# Вывод:
# Ошибка: Неверный формат даты. Ожидался '%Y-%m-%d', получено '26/10/2023'.
# Детали ошибки: time data '26/10/2023' does not match format '%Y-%m-%d'

Модуль dateutil. parser (для более гибкого парсинга)

Если вы не знаете точный формат входящих строк или форматы могут быть разнообразными, стандартный strptime() может быть неудобен. В таких случаях можно использовать стороннюю библиотеку Dateutil, которая имеет очень мощный парсер.

1. Установка Dateutil:

Bash

Pip install python-dateutil

2. Пример использования Dateutil. parser. parse():

Python

From dateutil import parser
 
Date_str_1 = "2023-10-26"
Date_str_2 = "26/10/2023 14:30"
Date_str_3 = "October 26, 2023 2:30 PM"
Date_str_4 = "Yesterday" # Также может парсить относительные даты
 
Print(f"Строка 1: {parser. parse(date_str_1)}")
Print(f"Строка 2: {parser. parse(date_str_2)}")
Print(f"Строка 3: {parser. parse(date_str_3)}")
Print(f"Строка 4: {parser. parse(date_str_4)}") # Парсит относительно текущей даты
 
# Вывод (может отличаться для "Yesterday" в зависимости от текущей даты):
# Строка 1: 2023-10-26 00:00:00
# Строка 2: 2023-10-26 14:30:00
# Строка 3: 2023-10-26 14:30:00
# Строка 4: 2025-05-22 00:00:00 (если сегодня 23 мая 2025)

Dateutil. parser. parse() очень удобен, но он может быть медленнее, чем strptime(), если вы обрабатываете очень большое количество дат, и вы всегда знаете точный формат. Для большинства задач dateutil является отличным выбором.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх