Jak przekonwertować ciąg znaków na datę i godzinę w Pythonie

Konwersja z jednego typu danych na inny rodzaj danych ma kluczowe znaczenie w każdym języku programowania. Prawie wszystkie języki programowania obsługują konwersje typów dla wbudowanych typów danych.

Niestandardowe typy danych, takie jak datetime, wymagają dodatkowych modułów do konwersji. Potrzebujemy modułów, zwłaszcza do konwersji daty i godziny, ponieważ praca z nimi nigdy nie była łatwa dla programistów. Na szczęście python ma wbudowane moduły do ​​pracy z datetime.

Nauczymy się konwertować łańcuch typu datetime na obiekt datetime w Pythonie przy użyciu różnych modułów. Zanim przejdziemy do tego, zobaczmy, dlaczego musimy to przekonwertować w pierwszej kolejności.

Dlaczego musimy przekonwertować ciąg datetime na obiekt datetime?

Kiedy musimy pracować z datami, nie jest łatwo pracować, jeśli są one w formacie łańcuchowym. Konwersja ich do formatu datetime bardzo ułatwia pracę z nimi. Daty w łańcuchach są jak normalne łańcuchy. Nie będzie miał żadnych specjalnych metod pracy z datami. Będzie miał ogólne metody łańcuchowe, których nie będziemy potrzebować podczas pracy z datami.

Powiedzmy, że musimy porównać dwie daty. Jeśli są w formacie łańcuchowym, możemy je poprawnie porównać. Jeśli są w formacie daty i godziny, możemy użyć operatorów porównania, takich jak liczby.

To tylko jeden scenariusz, w którym konwersja do formatu datetime ułatwia sprawę. Istnieje wiele scenariuszy, takich jak dodawanie dat, odejmowanie, obsługa stref czasowych itp., w których konwersja ciągu datetime na obiekt datetime sprawia, że ​​nasze życie jest łatwiejsze niż kiedykolwiek.

Powiedziawszy to, zobaczmy różne sposoby konwersji ciągu datetime na obiekt datetime. Będziemy używać wbudowanych modułów datetime i zewnętrznych modułów dateutil do konwersji ciągu datetime na obiekt datetime. Zacznijmy od modułu datetime

Korzystanie z daty i godziny

Datetime to wbudowany moduł Pythona, który służy do pracy z datami i godzinami. W tym module jest wiele klas, które pomagają nam pracować z datami i godzinami. Do konwersji użyjemy klasy datetime.datetime.

Datetime.datetime ma wiele metod. Interesuje nas metoda strptime, która pomoże nam w konwersji. Sprawdźmy to.

datetime.strptime

Metoda datetime.strptime służy do konwersji ciągu datetime na obiekt datetime. Zajmuje dwa ciągi, jeden to ciąg datetime, a drugi to format tego ciągu datetime. I zwraca obiekt datetime.

Zobaczmy przykład

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))

Jeśli uruchomisz powyższy kod, zobaczysz następujące dane wyjściowe.

2022-12-19 21:37:56

Wzięliśmy ciąg datetime i przekonwertowaliśmy go na obiekt datetime za pomocą metody datetime.strptime. Upewnij się, że format, który podajesz metodzie, jest dokładnie zgodny z ciągiem daty/godziny. Jeśli nie pasują, może pojawić się błąd lub nieprawidłowe dane wyjściowe.

Użyliśmy niektórych kodów formatujących dla formatu datetime. Możesz odnieść się do wszystkich kodów formatów w dokumentacji.

Metoda datetime.strptime zwraca pełną datę i godzinę. Jeśli chcesz uzyskać datę i godzinę osobno, możemy użyć metod date time obiektu datetime. Zobaczmy kod.

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())

Uruchom powyższy kod, a zobaczysz następujące dane wyjściowe.

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

Metody date i time zwrócą odpowiednio swoje obiekty. Znów będą mieli swoje odpowiednie metody dla dat i godzin.

Podaliśmy poprawne ciągi i formaty dla metody datetime.strptime, którą widzieliśmy powyżej. Jeśli nie podaliśmy ich poprawnie, pojawią się błędy. Zobaczmy, jak poradzić sobie z tymi błędami. Uruchom następujący kod.

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))

Powyższy kod zgłosi błąd, ponieważ formatowanie nie pasuje do ciągu daty i godziny. Aby poradzić sobie z tego rodzaju błędami, możemy użyć metody try-except Pythona. Dodajmy to.

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)

Teraz ponownie uruchom kod. Zobaczysz następujący komunikat o błędzie bez łamania kodu.

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

Podobnie możemy dodać try-except dla nadchodzącej metody parser.parse. Pomaga nam to uniknąć złamania kodu w środku. Nie jest to specjalnie związane z kontekstem tego samouczka, ale przypomni o konieczności użycia go w kodzie.

To wszystko dla modułu datetime. Przejdźmy do następnego modułu dateutil.

Używając dateutil

Moduł dateutil udostępnia rozszerzenia modułu datetime. Dzięki wielu łatwym w użyciu metodom praca z datami i godzinami jest o wiele łatwiejsza. Zainstalujmy moduł za pomocą następującego polecenia.

pip install python-dateutil

Interesująca nas metoda to dateutil.parser.parse. Zobaczmy, jak przekonwertować ciąg datetime na obiekt datetime.

parser.analizować

Metoda parser.parse pobierze łańcuch typu datetime i przekonwertuje go na odpowiedni format obiektu typu datetime. Nie musimy podawać żadnego formatowania dla tej metody. Automatycznie przekonwertuje podany ciąg datetime na obiekt datetime. Zobaczmy przykład.

from dateutil import parser

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

Jeśli uruchomisz powyższy kod, zobaczysz następujące dane wyjściowe.

2022-12-19 21:37:56

Ciąg daty i godziny musi mieć określony format akceptowany przez metodę parser.parse. Zgłosi błąd, jeśli format ciągu daty i godziny nie jest zgodny z żądanym formatem. Możesz sprawdzić wszystkie formaty ciągów daty i godziny, które akceptuje do automatycznych konwersji.

Ponieważ metoda parser.parse zwraca obiekt datetime, możemy uzyskać dostęp do obiektów daty i czasu oddzielnie, jak widzieliśmy w przypadku modułu datetime. Zobaczmy kod.

from dateutil import parser

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

Możesz zobaczyć poniższe dane wyjściowe, jeśli uruchomisz powyższy kod.

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

Jak widać, dateutil ułatwia porównawczą pracę z datami i godzinami. Możesz zapoznać się z modułem w dokumentacji.

Wniosek

Użyliśmy jednego wbudowanego modułu i jednego modułu innej firmy, aby przekonwertować ciąg datetime na obiekt DateTime. Jest jeszcze jeden wbudowany moduł o nazwie time, za pomocą którego możemy przekonwertować łańcuch datetime na obiekt DateTime, podobnie jak moduły datetime i dateutil. Spróbuj sam. Nie będzie to trudne, ponieważ robiłeś już podobne rzeczy z innymi modułami.

Może istnieć więcej bibliotek, dzięki którym możemy osiągnąć to samo. Moduły, których użyliśmy w samouczku na temat rzeczy, są standardowe i szeroko stosowane. Możesz dowiedzieć się więcej o innych modułach i wybrać ten, który najbardziej Ci odpowiada.

Możesz także zbadać, jak obliczyć różnicę czasu w Pythonie.

Miłego kodowania 🙂