IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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
Najprv si výpisy celú štruktúru:
#!/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 index 6
  • Január má index 1, december index 12

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 8-) .

Simulácia posledných sekúnd odpočtu - Objektovo orientované programovanie v Pythone
Problém roka 2038 - Wikipédie. [Online]. Dostupné z: https://cs.wikipedia.org/...ém_roku_2038
V budúcej lekcii, Knižnica datetime pre Python , téma dátumu a času v Pythone dokončíme.

 

Predchádzajúci článok
Riešené úlohy k 9. lekcii OOP v Pythone
Všetky články v sekcii
Objektovo orientované programovanie v Pythone
Preskočiť článok
(neodporúčame)
Knižnica datetime pre Python
Článok pre vás napísal Marek Bečvář
Avatar
Užívateľské hodnotenie:
1 hlasov
Marek Bečvář
Aktivity