Jak převést řetězec na datum a čas v Pythonu

Převod z jednoho typu dat na jiný typ dat je zásadní v každém programovacím jazyce. Téměř všechny programovací jazyky podporují převody typů pro vestavěné datové typy.

Vlastní datové typy, jako je datum a čas, vyžadují další moduly pro převody. Potřebujeme moduly, zejména pro převody data a času, protože práce s nimi nebyla pro programátory nikdy snadná. Naštěstí má python vestavěné moduly pro práci s datem.

Naučíme se, jak převést řetězec datetime na objekt datetime v Pythonu pomocí různých modulů. Než do toho skočíme, podívejme se, proč to musíme převést.

Proč potřebujeme převést řetězec datetime na objekt datetime?

Když musíme pracovat s daty, není snadné pracovat, pokud jsou ve formátu řetězce. Převedením do formátu datetime je práce s nimi velmi snadná. Data v řetězcích jsou jako normální řetězce. Nebude mít žádné speciální metody pro práci s daty. Bude mít obecné řetězcové metody, které při práci s daty nebudeme potřebovat.

Řekněme, že musíme porovnat dvě data. Pokud jsou ve formátu řetězce, můžeme je správně porovnat. Pokud jsou ve formátu datum a čas, můžeme použít operátory porovnání jako čísla.

Toto je pouze jeden scénář, kde převod do formátu datetime usnadňuje. Existuje spousta scénářů, jako je přidávání dat, odečítání, zpracování časových pásem atd., kde převod řetězce datetime na objekt datetime usnadňuje náš život než kdykoli předtím.

  Jak zjistit, zda vás někdo pronásleduje na Instagramu

Podívejme se na různé způsoby, jak převést řetězec datetime na objekt datetime. K převodu řetězce datetime na objekt datetime použijeme vestavěné moduly datetime a dateutil třetích stran. Začněme modulem datetime

Použití data a času

Datetime je vestavěný modul Pythonu, který se používá pro práci s daty a časy. V tomto modulu je spousta tříd, které nám pomáhají pracovat s daty a časem. Pro převod použijeme třídu datetime.datetime.

Datetime.datetime má mnoho metod. Zajímá nás metoda strptime, která nám pomůže při konverzi. Pojďme to zkontrolovat.

datetime.strptime

Metoda datetime.strptime se používá k převodu řetězce datetime na objekt datetime. Vyžaduje dva řetězce, jeden je řetězec datetime a druhý je formát tohoto řetězce datetime. A vrátí objekt datetime.

Podívejme se na příklad

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

Pokud spustíte výše uvedený kód, uvidíte následující výstup.

2022-12-19 21:37:56

Vzali jsme řetězec datetime a převedli jej na objekt datetime pomocí metody datetime.strptime. Ujistěte se, že formát, který poskytujete metodě, přesně odpovídá řetězci datetime. Pokud se neshodují, může se objevit chyba nebo nesprávný výstup.

Použili jsme některé formátovací kódy pro formát data a času. Všechny formátové kódy si můžete prohlédnout v dokumentech.

Metoda datetime.strptime vrátí úplné datum a čas. Pokud chcete získat datum a čas odděleně, můžeme použít metody date time objektu datetime. Podívejme se na kód.

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

Spusťte výše uvedený kód a uvidíte následující výstup.

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

Metody datum a čas vrátí příslušné objekty. Budou mít opět své příslušné metody pro data a časy.

  Jak obnovit smazaný koncept v Outlooku 365

Poskytli jsme správné řetězce a formáty pro metodu datetime.strptime, kterou jsme viděli výše. Pokud jsme je neposkytli správně, zobrazí se chyby. Podívejme se, jak se s těmito chybami vypořádat. Spusťte následující kód.

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

Výše uvedený kód vyvolá chybu, protože formátování neodpovídá řetězci datetime. Ke zpracování těchto druhů chyb můžeme použít try-except v Pythonu. Pojďme to přidat.

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)

Nyní spusťte kód znovu. Bez porušení kódu se zobrazí následující chybová zpráva.

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

Podobně můžeme přidat i try-kromě nadcházející metody parser.parse. Pomáhá nám to vyhnout se prolomení kódu uprostřed. To se nijak zvlášť netýká tohoto kontextu výukového programu, ale připomene vám to použít ve svém kódu.

To je vše pro modul datetime. Pojďme k dalšímu modulu dateutil.

Pomocí dateutil

Modul dateutil poskytuje rozšíření modulu datetime. Velmi usnadňuje práci s daty a časy pomocí mnoha metod se snadným použitím. Nainstalujme modul pomocí následujícího příkazu.

pip install python-dateutil

Metoda, která nás zajímá, je dateutil.parser.parse. Podívejme se, jak převést řetězec datetime na objekt datetime.

  Pokud plánujete nainstalovat tuny zařízení Smarthome, přeskočte Wi-Fi

parser.parse

Metoda parser.parse vezme řetězec datetime a převede jej do příslušného formátu objektu datetime. Pro tuto metodu nemusíme poskytovat žádné formátování. Automaticky převede daný řetězec datetime na objekt datetime. Podívejme se na příklad.

from dateutil import parser

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

Pokud spustíte výše uvedený kód, uvidíte následující výstup.

2022-12-19 21:37:56

Řetězec datetime musí být v konkrétním formátu, který metoda parser.parse přijímá. Pokud formát řetězce datetime neodpovídá požadovanému formátu, vyvolá chybu. Můžete zkontrolovat všechny formáty řetězce datetime, které akceptuje pro automatické převody.

Protože metoda parser.parse vrací objekt datetime, můžeme k objektům data a času přistupovat odděleně, jak jsme viděli u modulu datetime. Podívejme se na kód.

from dateutil import parser

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

Pokud spustíte výše uvedený kód, můžete vidět níže uvedený výstup.

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

Jak vidíte, dateutil usnadňuje práci s daty a časy srovnatelně. Modul můžete prozkoumat v dokumentech.

Závěr

K převodu řetězce datetime na objekt DateTime jsme použili jeden vestavěný modul a jeden modul třetí strany. Existuje další vestavěný modul zvaný čas, pomocí kterého můžeme převést řetězec datetime na objekt DateTime podobný modulům datetime a dateutil. Zkus to sám. Nebude to těžké, protože podobnou věc jste již udělali s jinými moduly.

Mohlo by existovat více knihoven, s nimiž můžeme dosáhnout stejné věci. Moduly, které jsme použili v tutoriálu, jsou standardní a široce používané. Můžete prozkoumat více o dalších modulech a vybrat si ten nejlepší, který vám vyhovuje.

Můžete také prozkoumat, jak vypočítat časový rozdíl v pythonu.

Veselé kódování 🙂