Преобразование строк «неизвестного формата» в объекты datetime в Python
Даты могут быть в разных форматах, например: «2009/05/13 19:19:30», «13 мая 2009 19:19» и «2009-05-13 19:19».
Python предоставляет множество модулей для работы с данными, связанными с датой и временем. Чтобы прочитать неизвестный формат строк даты в объект datetime Python, мы можем использовать модули python dateutil, datetime.
Объект datetime в Python — это отдельный объект, содержащий всю информацию об объектах даты и времени. Он также представляет данные, относящиеся к году, месяцу, дню, часам, минутам, секундам и часовым поясам.
В этой статье ниже мы увидим, как преобразовать строки неизвестного формата в объект datetime Python. Давайте рассмотрим сценарии ввода-вывода, чтобы понять, как преобразовать строку неизвестного формата в объекты datetime в Python.
Сценарии ввода-вывода
Предположим, у нас есть входная строка неизвестного формата. И на выходе мы видим преобразованный объект datetime.
Input string (unknown format):
20050607T090650
Output Datetime object:
2005-07-06 09:06:50
Data type:
Использование даты и времени. метод стрптайм()
Мы можем использовать библиотеку datetime для преобразования строки даты и времени в объект datetime. Метод strptime() анализирует строку в объект datetime, соответствующий заданным кодам формата. Ниже приведен синтаксис этого метода:
datetime.strptime(data, format_data)
Где,
Данные: дата_строка.
Формат: преобразует строку date_string на основе кодов этого формата.
Несколько кодов формата
%a День недели как сокращенное название.
%A День недели как полное имя.
%w День недели в виде десятичного числа.
%d День месяца с ведущим нулем.
%B Месяц как полное имя.
-
%b Месяц как сокращенное название.
%m Месяц в качестве ведущего нуля.
%y года в двузначном представлении.
%Y год со столетием.
%H Час (24-часовой формат) в виде десятичного числа с добавлением нуля.
%M Минута в виде десятичного числа, дополненного нулями.
%S Секунда в виде десятичного числа, дополненного нулями.
Смещение %z UTC в формате ±ЧЧММ[СС[.ffffff]].
%Z Имя часового пояса.
Пример
Мы преобразуем даты из строковых данных в объект datetime с помощью метода strptime().
from datetime import datetime
date_string = '20151002151700-0800'
print("Input string (unknown format):")
print(date_string)
obj = datetime.strptime(date_string, "%Y%m%d%H%M%S%z")
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))
Выход
Input string (unknown format):
20151002151700-0800
Output Datetime object:
2015-10-02 15:17:00-08:00
Data type: <class 'datetime.datetime'>
В приведенном выше блоке мы видим преобразованный объект datetime из входной строки. Мы указали формат «%Y%m%d%H%M%S%z» для метода strptime().
Пример
Давайте возьмем другой пример и преобразуем строку даты в объект datetime , указав код формата.
from datetime import datetime
date_string = 'Wed Mar 16 16:12:05 2016 +0800'
print("Input string (unknown format):")
print(date_string)
obj = datetime.strptime(date_string, '%a %b %d %H:%M:%S %Y %z')
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))
Выход
Input string (unknown format):
Wed Mar 16 16:12:05 2016 +0800
Output Datetime object:
2016-03-16 16:12:05+08:00
Data type: <class 'datetime.datetime'>
Здесь «Ср, 16 марта 16:12:05 2016 +0800» — это строка, а obj — это объект даты и времени.
Использование функции dateutil.parser.parse()
Метод parse() модуля dateutil очень гибок и анализирует все данные в заданной строке. Функция parse предлагает больше форматов для анализа строки даты в объект datetime.
Пример
Здесь мы будем использовать метод parse() для чтения строковых данных неизвестного формата в объект datetime.
from dateutil.parser import parse
date_string = 'Wed Mar 16 16:12:05 2016 +0800'
print("Input string (unknown format):")
print(date_string)
obj = parse(date_string)
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))
Выход
Input string (unknown format):
Wed Mar 16 16:12:05 2016 +0800
Output Datetime object:
2016-03-16 16:12:05+08:00
Data type: <class 'datetime.datetime'>
Преобразованный объект datetime из неизвестного формата отображается в приведенном выше блоке.
Пример
Обратите внимание, что некоторые строки date_strings могут быть неоднозначными, например: 1995-06-07 может означать 7 июня или 6 июля. Метод parse имеет такие параметры, как dayfirst иyearfirst, для обработки неоднозначных данных этого типа.
from dateutil.parser import parse
date_string = '20050607T090650'
print("Input string (unknown format):")
print(date_string)
obj = parse(date_string, dayfirst=True)
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))
Выход
Input string (unknown format):
20050607T090650
Output Datetime object:
2005-07-06 09:06:50
Data type: <class 'datetime.datetime'>
В этом примере мы указали логическое значение True для параметра dayfirst, поэтому в выходных данных объект datetime представляет первый день (7 июня).