Jak vypočítat časový rozdíl v Pythonu
Práce s časovými rozdíly v Pythonu
Při manipulaci s daty a časy v Pythonu se často setkáte s potřebou zjistit, jaký je mezi nimi časový rozdíl. V tomto návodu si ukážeme, jak spočítat rozdíl mezi dvěma časovými údaji, a to v hodinách, minutách a sekundách.
Po prostudování tohoto tutoriálu získáte znalosti o:
- využití modulu
datetimev Pythonu pro práci s daty a časy, - objektech
timedeltaa jejich praktickém využití, a - výpočtu časového rozdílu mezi dvěma libovolnými časovými údaji – v hodinách, minutách a sekundách.
Začněme.
Využití modulu datetime v Pythonu
Modul datetime je klíčový pro práci s daty a časy v Pythonu. Tento modul je součástí standardní knihovny Pythonu, takže jej můžete ihned importovat do svého projektu:
import datetime
Pro výpočet časového rozdílu je nutné mít dva různé časové údaje. Můžete si zvolit vytvoření:
- dvou objektů typu datum (date),
- dvou objektů typu čas (time), nebo
- kombinaci objektů datum a čas (datetime).
Vytvoření objektu datum (date)
Importujme třídu date z modulu datetime. Objekt typu datum v Pythonu vytvoříte pomocí syntaxe datetime.date(rok, měsíc, den). Následuje příklad vytvoření objektu date1:
from datetime import date date1 = datetime.date(2022,3,27) print(date1) # Výstup: 2022-03-27
Tento kód si můžete vyzkoušet na online kompilátoru Pythonu. Případně si můžete Python nainstalovat na svůj počítač.
Jak vidíte výše, datum je po vytištění formátováno jako RRRR-MM-DD.
Poznámka: Měsíc zadávejte jako celé číslo bez úvodních nul. Pokud jste zvyklí při zapisování dat přidávat k měsíci úvodní nulu, je třeba si na to dát pozor.
Například pro červen, 6. měsíc v roce, použijte 6, nikoli 06.
Zkuste spustit následující kód, kde je měsíc uveden jako 03 namísto 3. Uvidíte, že to způsobí chybu syntaxe:
date1 = datetime.date(2022,03,27)
print(date1)
# Chybová zpráva
File "<ipython-input-12-6eb72084e6ce>", line 1
date1 = datetime.date(2022,03,27)
^
SyntaxError: invalid token
Nyní se podíváme na to, jak vytvořit objekt typu čas (time).
Vytvoření objektu čas (time)
Pro vytvoření objektu času importujeme třídu time. Objekt typu čas můžete vytvořit zadáním atributů: hodina, minuta, sekunda a mikrosekunda. Všechny atributy jsou volitelné. Pokud některý atribut nezadáte, je standardně nastaven na 0.
Následující kód ukazuje, jak vytvořit objekt time1. Stejně jako u objektu data můžete vytisknout objekt času, abyste viděli, jak je formátován:
from datetime import time time1 = datetime.time(13,27,45,4600) print(time1) # Výstup: 13:27:45.004600
Vytvoření objektu datetime
Jak vidíte, objekt typu datum neobsahuje žádné informace o čase, a naopak, objekt typu čas neobsahuje informace o datu.
V praxi však budete často potřebovat jak datum, tak čas. Proto je doporučeno použít třídu datetime.
Objekty typu datetime vytvoříte takto:
dt1 = datetime.datetime(2022,3,27,13,27,45,46000) print(dt1) # Výstup: 2022-03-27 13:27:45.046000
Nyní vytvoříme další objekt typu datetime, tentokrát bez atributu pro sekundy. Můžete vidět, že hodnota sekund je nastavena na 0 - výchozí hodnotu.
dt2 = datetime.datetime(2022,6,30,14,28) print(dt2) # Výstup: 2022-06-30 14:28:00
Nyní víte, jak vytvářet časové údaje v Pythonu - jako data, časy a kombinace data a času. Pojďme zjistit, jak spočítat rozdíl mezi dvěma časovými údaji.
Objekt timedelta v Pythonu
V Pythonu představuje timedelta časový interval. Je to rozdíl mezi dvěma objekty typu datum, čas nebo datum a čas.
Pokud odečtete dva objekty typu datum, čas nebo datum a čas, získáte objekt timedelta. Tento objekt má užitečné atributy a metody pro výpočet časového rozdílu.
Pojďme vypočítat 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)) # Výstup 95 days, 1:00:14.954000 <class 'datetime.timedelta'>
Z výše uvedeného kódu je zřejmé, že proměnná tdelta obsahuje časový rozdíl mezi dt1 a dt2. Typ proměnné tdelta je timedelta, což jsme ověřili pomocí vestavěné funkce type().
Pojďme se podívat na další příklad.
Výpočet časového rozdílu mezi dvěma daty
Uvažujme jednoduchý, ale zajímavý příklad.
Problém: Chceme vypočítat časový rozdíl mezi aktuálním datem (dnes) a vašimi narozeninami.
Jako první časový údaj nastavíme dnešní datum a jako druhý datum vašich narozenin.
V prvním kroku vytvoříme dva objekty datetime:
- jeden pro dnešní datum, nazvěme ho
dnes, a - druhý pro narozeniny, nazvěme ho
narozeniny.
Třída datetime má metodu now(), která vrací aktuální místní datum a čas. Využijme ji tedy pro dnes.
today = datetime.datetime.now() print(today) # Ukázkový výstup: 2022-01-22 09:10:18.489538
V následujícím kódu nahraďte bday svými narozeninami. Pokud čtete tento návod po vašich narozeninách, nastavte bday na vaše příští narozeniny.
bday = datetime.datetime(2022,8,30,11,59) print(bday) # Ukázkový výstup: 2022-08-30 11:59:00
Dalším krokem je výpočet time_diff, což je objekt timedelta, jak jsme již zmínili. Jednoduše odečtěte dnešní datum od data vašich narozenin.
time_diff = bday - today
print(f"Vaše narozeniny jsou za {time_diff}")
# Výstup
Vaše narozeniny jsou za 220 days, 2:46:00.127416
Pro získání počtu zbývajících dní použijte atribut days na objektu time_diff:
tdays = time_diff.days
print(f"Vaše narozeniny jsou za {tdays} dní.")
# Výstup
Vaše narozeniny jsou za 220 dní.
Výpočet časového rozdílu v sekundách
Pojďme zjistit, za kolik sekund máte narozeniny.
K výpočtu celkového časového rozdílu v sekundách použijte metodu total_seconds() na objektu timedelta time_diff.
tsecs = time_diff.total_seconds()
print(f"Vaše narozeniny jsou za {tsecs} sekund.")
# Výstup
Vaše narozeniny jsou za 19017960.127416 sekund.
No, to je dlouhá doba čekání!
Nyní víte, jak spočítat časový rozdíl mezi libovolnými dvěma časovými údaji v sekundách.
Připomeňme si základy: Den má 24 hodin, hodina má 60 minut a minuta má 60 sekund.
Abychom mohli převádět sekundy na minuty, hodiny a dny, můžeme použít následující převodní faktory.
| Převod z | Převod na | Faktor |
| Sekundy | Minuty | 60 |
| Sekundy | Hodiny | 3600 |
| Sekundy | Dny | 86400 |
V následujících částech převedeme časový rozdíl v sekundách na minuty a hodiny.
Výpočet časového rozdílu v minutách
Pro získání časového rozdílu v minutách stačí vydělit celkový počet sekund 60.
Vydělme tedy proměnnou tsecs 60 a uložme ji do proměnné tmins:
tmins = tsecs/60
print(f"Vaše narozeniny jsou za {tmins} minut.")
# Výstup
Vaše narozeniny jsou za 316966.0021236 minut.
Výpočet časového rozdílu v hodinách
Nyní, když máme časový rozdíl v minutách, můžeme ho vydělit 60, abychom získali rozdíl v hodinách. Stejně tak můžeme celkový počet sekund vydělit 60 * 60 = 3600.
thrs = tsecs/(60*60)
print(f"Vaše narozeniny jsou za {thrs} hodin.")
# Výstup
Vaše narozeniny jsou za 5282.76670206 hodin.
Nyní víte, jak spočítat časový rozdíl v libovolné jednotce podle vašeho výběru.
Závěr
V tomto tutoriálu jste se naučili:
- vytvářet a pracovat s daty a časy pomocí modulu
datetimev Pythonu, - používat objekty
timedeltapro získání časového intervalu, 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, jak vypočítat časový rozdíl v Pythonu, je čas procvičit si nabyté dovednosti.
Přeji vám mnoho úspěchů při učení a programování!
Zde se můžete dozvědět, jak porovnávat hodnoty, nebo jak vytvořit hru had v pythonu.