Lekce 10 - Datum a čas v Pythonu

Vydávání, hosting a aktualizace umožňují jeho sponzoři.
V minulé lekci, Statika v Pythonu, jsme si vysvětlili statiku v Pythonu. V této lekci bych chtěl přiblížit, jak v Pythonu pracujeme při zjišťování a používání aktuálního data a času. To nám může být užitečné například při předávání informací uživateli našich aplikací nebo při vytváření všemožných časem vymezených událostí.
Jak používat knihovny jsme si již říkali v předešlých
lekcích. Dnes se zaměříme hlavně na knihovnu time
(práce
s časem) a knihovnu calendar
(zpracování data/kalendáře).
time
První a velmi užitečnou knihovnou je knihovna time
. Poskytne
nám informace o aktuálním čase a datu, a navíc nám pomůže i s
přehledným vypsáním pro uživatele. Knihovnu si prvně naimportujeme:
import time
Abychom modul time
mohli používat, musíme ho vždy na
začátku programu takto naimportovat. A teď již k vlastním funkcím.
time()
Základní funkcí modulu time
je stejnojmenná funkce
time()
. Její návratová hodnota (označovaná jako
tick), se zprvu může zdát nečitelná. Jedná se o desetinné
číslo (float) ukazující počet sekund, které uběhly od 1.1.1970. Zkusme si
tuto hodnotu vypsat:
#!/usr/bin/env python3 import time print(time.time())
Hodnota jako taková má mnoho využití. Pokud například kdekoliv v našem
programu založíme proměnnou s aktuální hodnotou času, později můžeme
vytvořit druhou "aktuálnější" hodnotu. Posléze po odečtení obou hodnot
zjistíme, kolik času mezi jednotlivými body v programu proběhlo. Podobným
způsobem jde například vytvořit i časovaný while
loop:
import time startTime = time.time() while (time.time()-startTime) <= 3: # vlastní kód, který bude probíhat 3 vteřiny
Podobně lze využít i metodu time.clock()
. Ta se
od time.time()
liší tím, že její hodnota udává počet sekund
uběhlých od spuštění aktuálního procesu (našeho vlastního
programu).
localtime()
Tato metoda nám poskytuje aktuální informace z prostředí uživatele.
Všechny informace jsou ve speciálním objektu struct_time
. Tento
objekt (časová struktura) je tvořen 9 čísly:
Index | Vlastnost | Hodnota |
---|---|---|
0 | Rok | 2019 |
1 | Měsíc | 1 - 12 |
2 | Den | 1 - 31 |
3 | Hodina | 0 - 23 |
4 | Minuta | 0 - 59 |
5 | Sekunda | 0 - 61 |
6 | Den v týdnu | 0 - 6 (0 = Pondělí) |
7 | Den v roce | 1 - 366 (Juliánský den) |
8 | Letní čas | 0 / 1 |
Nejprve si vypišme celou strukturu:
#!/usr/bin/env python3 import time print(time.localtime())
Jeden způsob, jak data z tohoto objektu dostat, je přímým výběrem pomocí indexu:
#!/usr/bin/env python3 import time local = time.localtime() print("Dnes je {}. {}. {}.".format(local[2], local[1], local[0]))
Takto můžeme vytvořit jakýkoliv styl formátování budeme chtít.
asctime()
Pro stručně a čitelně definované formátování můžeme použít funkci
asctime()
. Do funkce vložíme časový objekt
(struct_time
) a vrátí se nám text (string) s vypsanými
hodnotami v předem určeném pořadí:
#!/usr/bin/env python3 import time local = time.localtime() print("Datum a čas: {} ".format(time.asctime(local)))
sleep()
Užitečná funkce sleep()
nám umožňuje náš program na
nějakou dobu pozdržet a to na přesný časový úsek, který předáme jako
parametr. Zkusme si to:
#!/usr/bin/env python3 import time print("Start") time.sleep(3) #program se na 3 vteřiny zastaví ("uspí") print("Konec")
Toto byly základní funkce knihovny time
, se kterými se
můžeme při své práci setkat. Pro hlubší bádání doporučuji vyhledání
oficiálních popisů samotné knihovny.
calendar
Druhou knihovnou, kterou si dnes představíme, je calendar
,
který přidává nové možnosti formátování výpisu dat pro uživatele.
Nové moduly musíme vždy na začátku naimportovat:
import calendar
month()
První hezkou metodou je month()
. Při použití musíme
specifikovat jaký rok a měsíc si přejeme vybrat. Funkce nám poté vrátí
několik řádků textu s velmi přehledným kalendářem:
#!/usr/bin/env python3 import calendar month = calendar.month(2019, 11) print("Kalendář na tento měsíc") print(month)
Pokud bychom chtěli podobný kalendář pro celý rok, můžeme
použít funkci calendar()
a jako parametr ji předat rok. Ta ale
vrátí velké množství textu. Je tedy asi lepší používat jednotlivé
měsíce, u kterých, pokud bude potřeba, můžeme dělat vlastní změny.
monthrange(rok, měsíc)
Když budeme o daném měsíci potřebovat více informací, dobře
využijeme monthrange()
. Dostaneme z ní dvě čísla a to ve tvaru
(co je první den v měsíci za den v týdnu, celkový počet dní v
měsíci):
#!/usr/bin/env python3 import calendar mr = calendar.monthrange(2019, 11) print(mr)
U určování dne v týdnu musíme dát pozor na 2 věci:
- Pondělí má index
0
a neděle index6
- Leden má index
1
, prosinec index12
weekday()
Funkce weekday()
nám bude užitečná, pokud budeme chtít
rychle zjistit, jakým dnem v týdnu bylo/je/bude nějaké datum. Parametry jsou
rok, měsíc a den. Funkce vrátí jediné číslo a to index dne v týdnu
odpovídající zadanému datu:
#!/usr/bin/env python3 import calendar #Seznam dnů v týdnu s indexy dny_v_tydnu={0:"pondělí", 1:"úterý", 2:"středa", 3:"čtvrtek", 4:"pátek", 5:"sobota", 6:"neděle"} den5 = calendar.weekday(2019, 11, 5) print("5. listopadu bylo " + dny_v_tydnu[den5])
isleap()
Pokud budeme chtít rychle zjistit, jestli je daný rok přestupný nebo ne,
poslouží nám funkce isleap()
. Funkce nám vrátí jako odpověď
pouze True
/False
.
#!/usr/bin/env python3 import calendar leap1 = calendar.isleap(2019) print("2019 přestupný? {}".format(leap1)) leap2 = calendar.isleap(2020) print("2020 přestupný? {}".format(leap2))
Toto shrnuje potřebné moduly, které nám pomohou při práci s datem a s kalendáři.
Zajímavost - Rok 2038
U knihovny time
jsme se zmínili o datu 1.1.1970. To je datum,
kdy se zrodil operační systém UNIX.
Toto počitadlo, jak jsem již zmínil dříve, ukazuje počet sekund od
začátku epochy. Odpočet běží v číslech typu Int32
. Co
znamená Int32
? Jakékoli číslo ukážeme, program jej má
uložené pomocí řady 32 bitů (nul a jedniček).
Tento fakt ale nese jeden problém. Jelikož se jedná o "pouze" 32 bitů, existuje zde reálný limit čísel, která takto mohou být vyjádřena. Přesněji od -2 147 483 648 do 2 147 483 647.
A stejný limit existuje i pro naše počítadlo času. Tento problém si uvědomuje již spousta lidí. Na internetu se o této věci můžeme dočíst více jako o "Problému roku 2038".
Pokud by se tato situace do uplynutí limitu nevyřešila, nastane pro naše
počítače a i pro nás velmi zvláštní situace. Místo 19. 1. 2038 bychom se
probudili do odpoledne 13. 12. 1901 .

Problém roku 2038 – Wikipedie. [online]. Dostupné z: https://cs.wikipedia.org/…ém_roku_2038
V příští lekci, Knihovna datetime pro Python, téma data a času v Pythonu dokončíme.
Komentáře
Zatím nikdo nevložil komentář - buď první!