Jak vypočítat časový rozdíl v Pythonu

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.

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(,,). Zde je příklad vytvoření objektu data date1:

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.

  Jak „skrýt“ aplikaci na vašem iPhonu nebo iPadu

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.

  Jak komprimovat obrázky pomocí Google Squoosh

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.

  Proč nejsou viry problémem v systému Chrome OS?

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.