Při práci s daty a časy v Pythonu budete často muset vypočítat časový rozdíl. V tomto tutoriálu se naučíte, jak vypočítat rozdíl mezi dvěma časovými razítky v hodinách, minutách a sekundách.
Na konci tohoto tutoriálu se naučíte:
- jak používat modul datetime v Pythonu pro práci s daty a časem,
- co jsou objekty timedelta a jak jsou užitečné a
- vypočítat časový rozdíl mezi libovolnými dvěma časovými razítky – v hodinách, minutách a sekundách.
Začněme.
Table of Contents
Jak používat modul datetime v Pythonu
Pro práci s daty a časy v Pythonu použijete modul datetime. Modul datetime je součástí standardní knihovny Pythonu. Můžete tedy pokračovat a ihned jej importovat do svého pracovního prostředí, například takto:
import datetime
Abyste mohli vypočítat časový rozdíl, musíte vytvořit dvě různá časová razítka. Můžete se rozhodnout vytvořit:
- dva datlové objekty,
- dva časové objekty, popř
- kombinace objektů datum a čas – datum a čas.
Jak vytvořit objekt data v Pythonu
Pojďme importovat třídu data z modulu datetime. Chcete-li vytvořit objekt data v Pythonu, můžete použít obecnou syntaxi datetime.date(
from datetime import date date1 = datetime.date(2022,3,27) print(date1) # Output: 2022-03-27
Můžete vyzkoušet kód na kompilátoru etechblog.cz Pythonu. Nebo si na svůj počítač nainstalujte Python.
Jak je uvedeno výše, při tisku data je datum formátováno ve formátu RRRR-MM-DD.
Poznámka: Měsíc zadejte jako celé číslo bez úvodních nul. Je pravděpodobné, že jste při zapisování dat zvyklí přidávat k měsíci úvodní nulu.
Chcete-li například zadat datum v červnu, 6. měsíci v roce: použijte 6, nikoli 06.
Zkuste například spustit následující úryvek kódu – kde je měsíc uveden jako 03 namísto pouze 3. Uvidíte, že způsobí chybu syntaxe, jak je znázorněno:
date1 = datetime.date(2022,03,27) print(date1) # Error Message File "<ipython-input-12-6eb72084e6ce>", line 1 date1 = datetime.date(2022,03,27) ^ SyntaxError: invalid token
Podívejme se nyní, jak vytvořit časový objekt v Pythonu.
Jak vytvořit časový objekt v Pythonu
Chcete-li vytvořit objekt času, importujme třídu času. Jakýkoli časový objekt Pythonu lze vytvořit pomocí časové třídy zadáním následujících atributů třídy: hodina, minuta, sekunda a mikrosekunda.
Všechny tyto atributy jsou však volitelné. Pokud neurčíte určitý atribut, řekněme druhý, je standardně nastaven na 0.
Následující fragment kódu ukazuje, jak můžete vytvořit časový objekt time1. Stejně jako u objektu data můžete vytisknout objekt času, abyste viděli formátovaný čas.
from datetime import time time1 = datetime.time(13,27,45,4600) print(time1) # Output: 13:27:45.004600
Jak vytvořit objekt datetime v Pythonu
Jak vidíte, objekt data nemá žádné informace o čase. A objekt času neobsahuje informace o datu.
V praxi však budete potřebovat informace o datu i čase. Proto se doporučuje místo toho použít třídu datetime.
Můžete přistupovat ke třídě datetime a vytvářet objekty datetime v Pythonu, jak je znázorněno níže:
dt1 = datetime.datetime(2022,3,27,13,27,45,46000) print(dt1) # Output: 2022-03-27 13:27:45.046000
Nyní vytvoříme další objekt datetime dt2 bez druhého atributu. Můžete vidět, že je nastavena na 0 – výchozí hodnota.
dt2 = datetime.datetime(2022,6,30,14,28) print(dt2) # Output: 2022-06-30 14:28:00
Doposud jste se naučili, jak vytvářet časová razítka v Pythonu – jako data, časy a datumy. Nyní je čas zjistit, jak můžete vypočítat rozdíl mezi libovolnými dvěma časovými razítky.
Chcete-li to zjistit, přejděte do další sekce.
Jak používat objekt timedelta v Pythonu
V Pythonu timedelta označuje časový úsek. Je to rozdíl mezi dvěma objekty typu datum, čas nebo datum a čas.
Pokud přidáte nebo odečtete dva objekty typu datum, čas nebo datum a čas, získáte objekt timedelta. Tento objekt timedelta má užitečné atributy a metody, které mohou pomoci vypočítat časový rozdíl.
Pokračujme a vypočítejme rozdíl mezi dvěma objekty datetime dt1 a dt2.
dt1 = datetime.datetime(2022,3,27,13,27,45,46000) dt2 = datetime.datetime(2022,6,30,14,28) tdelta = dt2 - dt1 print(tdelta) print(type(tdelta)) # Output 95 days, 1:00:14.954000 <class 'datetime.timedelta'>
Z výše uvedeného úryvku kódu můžete vidět, že proměnná tdelta obsahuje časový rozdíl mezi dt1 a dt2. A typ tdelta je ověřen jako timedelta třídy pomocí vestavěného Pythonu typ() funkce.
Nyní nakódujme další příklad.
Jak najít časový rozdíl mezi dvěma daty
Vezměme si jednoduchý, ale zajímavý příklad.
Problém: Chcete-li vypočítat časový rozdíl mezi aktuálním datem (dnes) a vašimi narozeninami.
Chcete-li to provést, nastavte jako první časové razítko dnešek a jako druhé časové razítko své narozeniny.
Jako první krok vytvoříme dva objekty datetime:
- jeden pro dnešek, říkejme tomu dnes, a
- další k narozeninám, říkejme tomu narozeniny
Třída datetime má metodu now(), která vám poskytne aktuální místní datum a čas. Využijme to tedy dnes – naše referenční datum.
today = datetime.datetime.now() print(today) # Sample Output: 2022-01-22 09:10:18.489538
V níže uvedeném kódu nahraďte bday svými narozeninami, abyste vypočítali čas zbývající do vašich letošních narozenin.
Pokud to čtete až po uplynutí vašich narozenin, klidně nastavte den na své příští narozeniny.
bday = datetime.datetime(2022,8,30,11,59) print(bday) # Sample Output: 2022-08-30 11:59:00
Dalším krokem je výpočet time_diff, což je objekt timedleta, jak bylo vysvětleno dříve. Jednoduše odečtěte dnešek od svých narozenin a budete mít časový posun.
time_diff = bday - today print(f"Your birthday is in {time_diff}") # Output Your birthday is in 220 days, 2:46:00.127416
Chcete-li zjistit počet zbývajících dní, použijte atribut days on time_diff, jak je znázorněno:
tdays = time_diff.days print(f"Your birthday is in {tdays} days.") # Output Your birthday is in 220 days.
Jak zjistit časový rozdíl v sekundách
Pojďme si nyní spočítat, za kolik sekund máte narozeniny.
Chcete-li vypočítat celkový časový rozdíl v sekundách, použijte metodu total_seconds() na objektu timedelta time_diff.
tsecs = time_diff.total_seconds() print(f"Your birthday is {tsecs} seconds away.") # Output Your birthday is 19017960.127416 seconds away.
No, to je příliš dlouhé čekání!
To znamená, že nyní víte, jak vypočítat časový rozdíl mezi libovolnými dvěma časovými razítky v sekundách.
Vraťme se nyní k některým základům a zapišme si následující. Den se skládá z 24 hodin, hodina má 60 minut a 60 sekund tvoří minutu.
To je shrnuto na obrázku níže:
Hodiny, minuty a sekundy
Chcete-li tedy převést z sekund na minuty, hodiny a dny, můžete použít následující tabulku a vydělit ji odpovídajícím převodním faktorem.
Časová převodní tabulka
V dalších částech převedeme časový rozdíl v sekundách na minuty a hodiny.
Jak zjistit časový rozdíl v minutách
Chcete-li získat časový rozdíl v minutách, stačí vydělit celkový počet sekund 60.
Vydělme tsecs 60 a uložme to do proměnné nazvané tmins, takto:
tmins = tsecs/60 print(f"Your birthday is {tmins} minutes away.") # Output Your birthday is 316966.0021236 minutes away.
Jak zjistit časový rozdíl v hodinách
Nyní, když jste vypočítali časový rozdíl v minutách, můžete jej vydělit faktorem 60, abyste získali rozdíl v hodinách. Nebo můžete celkový počet sekund vydělit 60*60 = 3600.
thrs = tsecs/(60*60) print(f"Your birthday is {thrs} hours away.") # Output Your birthday is 5282.76670206 hours away.
Nyní jste se tedy naučili, jak vypočítat časový rozdíl v libovolné jednotce podle vašeho výběru.
Závěr
V tomto tutoriálu jste se naučili, jak:
- vytvářet a pracovat s daty a časy pomocí modulu datetime v Pythonu,
- použijte objekty timedelta k získání časového rozpětí nebo časového rozdílu a
- vypočítat časový rozdíl v sekundách, minutách a hodinách.
Doufám, že vám tento návod pomohl. Nyní, když víte vše o výpočtu časového rozdílu v Pythonu, je čas procvičit své dovednosti.
Šťastné učení a kódování!
Zde se dozvíte, jak psát stejné nebo nerovnající se kódu nebo vytvořit hru hada v pythonu.