Как да конвертирате низ в Datetime в Python

Преобразуването от един тип данни в друг тип данни е от решаващо значение за всеки език за програмиране. Почти всички езици за програмиране поддържат преобразуване на типове за вградени типове данни.

Персонализираните типове данни като дата и час се нуждаят от допълнителни модули за реализации. Имаме нужда от модули, особено за преобразуване на дата и час, тъй като работата с тях никога не е била лесна за програмистите. За щастие, Python има вградени модули за работа с datetime.

Ще научим как да преобразуваме низ за дата и час в обект за дата и час в Python с помощта на различни модули. Преди да преминем към това, нека видим защо трябва да го конвертираме на първо място.

Защо трябва да конвертираме низ за дата и час в обект за дата и час?

Когато трябва да работим с дати, не е лесно да работим, ако те са в низов формат. Преобразуването им във формат за дата и час прави работата с тях много лесна. Датите в низовете са като нормалните низове. Няма да има специални методи за работа с дати. Ще има общи методи за низове, които няма да са ни необходими, докато работим с дати.

Да кажем, че трябва да сравним две дати. Ако са в низов формат, можем да ги сравним правилно. Ако са във формат за дата и час, можем да използваме операторите за сравнение като числа.

Това е само един сценарий, при който конвертирането във формат за дата и час улеснява нещата. Има много сценарии като добавяне на дати, изваждане, обработка на часови зони и т.н., където преобразуването на низ от дата и час в обект от дата и час прави живота ни по-лесен от всякога.

  Коригирайте Microsoft Teams, който продължава да казва, че съм далеч, но не съм грешка

С това казано, нека видим различни начини за преобразуване на низ за дата и час в обект за дата и час. Ще използваме вградени модули datetime и dateutil на трети страни, за да конвертираме низа datetime в обект datetime. Нека започнем с модула за дата и час

Използване на дата и час

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.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 ще върнат своите обекти съответно. Те отново ще имат съответните си методи за дати и часове.

  Как HTTP/3 и QUIC ще ускорят вашето сърфиране в мрежата

Предоставихме правилните низове и формати за метода 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))

Горният код ще изведе грешка, тъй като форматирането не съответства на низа за дата и час. За да се справим с тези видове грешки, можем да използваме try-except на 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.

  Как да видите колко свободно място е налично в DropBox

парсер.парс

Методът parser.parse ще вземе низ за дата и час и ще го преобразува в съответния формат на обект за дата и час. Не е необходимо да предоставяме форматиране за този метод. Той автоматично ще преобразува дадения низ за дата и час в обект за дата и час. Да видим един пример.

from dateutil import parser

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

Ако изпълните горния код, ще видите следния резултат.

2022-12-19 21:37:56

Низът за дата и час трябва да бъде в определен формат, който методът parser.parse приема. Ще изведе грешка, ако форматът на низа за дата и час не е според желания формат. Можете да проверите всички формати на низове за дата и час, които приема за автоматични преобразувания.

Тъй като методът parser.parse връща обект за дата и час, можем да имаме достъп до обектите за дата и час отделно, както видяхме с модула за дата и час. Да видим кода.

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. Има друг вграден модул, наречен time, с който можем да преобразуваме низа от datetime в обект DateTime, подобен на модулите datetime и dateutil. Опитайте сами. Няма да е трудно, тъй като вече сте правили подобно нещо с други модули.

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

Можете също така да проучите как да изчислите разликата във времето в python.

Приятно кодиране 🙂