10. diel - Dátum a čas v Pythone
V predchádzajúcom cvičení, Riešené úlohy k 9. lekcii OOP v Pythone, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
V minulej lekcii, Riešené úlohy k 9. lekcii OOP v Pythone , sme si vysvetlili statiku v Pythone. V tejto lekcii by som chcel priblížiť, ako v Pythone pracujeme pri zisťovaní a používaní aktuálneho dátumu a času. To nám môže byť užitočné napríklad pri prenose informácií užívateľmi našich aplikácií alebo pri vytváraní všemožných časom vymedzených udalostí.
Ako používať knižnice sme si už hovorili v predošlých
lekciách. Dnes sa zameriame hlavne na knižnicu time
(práca s
časom) a knižnicu calendar
(spracovanie data / kalendára).
Time
Prvý a veľmi užitočnú knižnicou je knižnica time
.
Poskytne nám informácie o aktuálnom čase a dátume, a navyše nám pomôže
aj s prehľadným vypísaním pre užívateľov. Knižnicu si prvýkrát
importujete:
import time
Aby sme modul time
mohli používať, musíme ho vždy na
začiatku programu takto naimportovať. A teraz už k vlastným funkciám.
Time ()
Základnou funkciou modulu time
je rovnomenná funkcia
time()
. Jej návratová hodnota (označovaná ako tick),
sa spočiatku môže zdať nečitateľná. Jedná sa o desatinné číslo
(float) ukazujúci počet sekúnd, ktoré ubehli od 1.1.1970. Skúsme si túto
hodnotu vypísať:
#!/usr/bin/env python3 import time print(time.time())
Hodnota ako taká má mnoho využití. Ak napríklad kdekoľvek v našom
programe založíme premennú s aktuálnou hodnotou času, neskôr môžeme
vytvoriť druhú "aktuálnejšie" hodnotu. Neskôr po odpočítaní oboch
hodnôt zistíme, koľko času medzi jednotlivými bodmi v programe prebehlo.
Podobným spôsobom ide napríklad vytvoriť aj časovaný while
loop:
import time startTime = time.time() while (time.time()-startTime) <= 3: # vlastní kód, který bude probíhat 3 vteřiny
Podobne možno využiť i metódu time.clock()
. Tá
sa od time.time()
líši tým, že jej hodnota udáva počet
sekúnd uběhlých od spustenia aktuálneho procesu (nášho vlastného
programu).
Localtime ()
Táto metóda nám poskytuje aktuálne informácie z prostredia
používateľa. Všetky informácie sú v špeciálnom objektu
struct_time
. Tento objekt (časová štruktúra) je
tvorený 9 číslami:
index | vlastnosť | hodnota |
---|---|---|
0 | rok | 2019 |
1 | mesiac | 1 - 12 |
2 | deň | 1 - 31 |
3 | hodina | 0 - 23 |
4 | minúta | 0 - 59 |
5 | sekunda | 0 - 61 |
6 | Deň v týždni | 0 - 6 (0 = Pondelok) |
7 | Deň v roku | 1 - 366 (Juliánsky deň) |
8 | letný čas | 0/1 |
#!/usr/bin/env python3 import time print(time.localtime())
Jeden spôsob, ako dáta z tohto objektu dostať, je priamym výberom pomocou indexu:
#!/usr/bin/env python3 import time local = time.localtime() print("Dnes je {}. {}. {}.".format(local[2], local[1], local[0]))
Takto môžeme vytvoriť akýkoľvek štýl formátovania budeme chcieť.
Asctime ()
Pre stručne a čitateľne definované formátovanie môžeme použiť
funkciu asctime()
. Do funkcie vložíme časový objekt
(struct_time
) a vráti sa nám text (string) s vypísanými
hodnotami vo vopred určenom poradí:
#!/usr/bin/env python3 import time local = time.localtime() print("Datum a čas: {} ".format(time.asctime(local)))
Sleep ()
Užitočná funkcia sleep()
nám umožňuje náš program na
nejakú dobu pozdržať a to na presný časový úsek, ktorý odovzdáme ako
parameter. Skúsme si to:
#!/usr/bin/env python3 import time print("Start") time.sleep(3) #program se na 3 vteřiny zastaví ("uspí") print("Konec")
Toto boli základné funkcie knižnice time
, s ktorými sa
môžeme pri svojej práci stretnúť. Pre hlbšie bádanie odporúčam
vyhľadanie oficiálnych popisov samotnej knižnice.
Calendar
Druhou knižnicou, ktorú si dnes predstavíme, je calendar
,
ktorý pridáva nové možnosti formátovania výpisu dát pre užívateľa.
Nové moduly musíme vždy na začiatku naimportovať:
import calendar
Month ()
Prvý peknú metódou je month()
. Pri použití musíme
špecifikovať aký rok a mesiac si prajeme vybrať. Funkcia nám potom vráti
niekoľko riadkov textu s veľmi prehľadným kalendárom:
#!/usr/bin/env python3 import calendar month = calendar.month(2019, 11) print("Kalendář na tento měsíc") print(month)
Ak by sme chceli podobný kalendár pre celý rok, môžeme
použiť funkciu calendar()
a ako parameter ju odovzdať rok. Tá
ale vráti veľké množstvo textu. Je teda asi lepšie používať jednotlivé
mesiace, u ktorých, ak bude treba, môžeme robiť vlastné zmeny.
Monthrange (rok, mesiac)
Keď budeme o danom mesiaci potrebovať viac informácií, dobre využijeme
monthrange()
. Dostaneme z nej dve čísla a to v tvare (čo je
prvý deň v mesiaci za deň v týždni, celkový počet dní v
mesiaci):
#!/usr/bin/env python3 import calendar mr = calendar.monthrange(2019, 11) print(mr)
U určovanie dňa v týždni musíme dať pozor na 2 veci:
- Pondelok má index
0
a nedele index6
- Január má index
1
, december index12
Weekday ()
Funkcia weekday()
nám bude užitočná, ak budeme chcieť
rýchlo zistiť, akým dňom v týždni bolo / je / bude nejaké dátum.
Parametre sú rok, mesiac a deň. Funkcia vráti jediné číslo a to index dňa
v týždni zodpovedajúci zadanému dátumu:
#!/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 ()
Ak budeme chcieť rýchlo zistiť, či je daný rok priestupný alebo nie,
poslúži nám funkcia isleap()
. Funkcia nám vráti ako odpoveď
iba 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 zhŕňa potrebné moduly, ktoré nám pomôžu pri práci s dátumom as kalendári.
Zaujímavosť - Rok 2038
U knižnice time
sme sa zmienili o dátume 1.1.1970. To je
dátum, kedy sa zrodil operačný systém UNIX.
Toto počítadlo, ako som už spomenul predtým, ukazuje počet sekúnd od
začiatku epochy. Odpočet beží v číslach typu Int32
. Čo
znamená Int32
? Akékoľvek číslo ukážeme, program ho má
uložené pomocou radu 32 bitov (núl a jednotiek).
Tento fakt ale nesie jeden problém. Keďže sa jedná o "iba" 32 bitov, existuje tu reálny limit čísel, ktoré takto môžu byť vyjadrená. Presnejšie od -2 147 483 648 do 2 147 483 647.
A rovnaký limit existuje aj pre naše počítadlo času. Tento problém si uvedomuje už veľa ľudí. Na internete sa o tejto veci môžeme dočítať viac ako o "Problému roka 2038".
Ak by sa táto situácia do uplynutia limitu nevyriešila, nastane pre naše počítače a aj pre nás veľmi zvláštne situácie. Namiesto 19. 1. 2038 by sme sa prebudili do popoludnia 13. 12. 1901 .
Problém roka 2038 - Wikipédie. [Online]. Dostupné z: https://cs.wikipedia.org/...ém_roku_2038V budúcej lekcii, Knižnica datetime pre Python , téma dátumu a času v Pythone dokončíme.