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í.

11. diel - Knižnica datetime pre Python

V minulej lekcii, Dátum a čas v Pythone , sme si predstavili knižnice time a calendar. V tomto Python tutoriálu sa pozrieme na prácu s modulom datetime, ktorý sa vedľa modulov time a calendar používa pre prácu s dátumom a časom a podporuje príjemnejšie, objektový prístup.

Datetime

Knižnicu datetime musíme vždy na začiatku programu naimportovať:

import datetime

Táto knižnica ponúka viac objektový prístup než ten, ktorý sme si ukazovali minule s time. Pracuje totiž s vlastnými špecializovanými datetime objekty. To nám ľahko umožní od seba jednotlivé dáta napríklad odčítať alebo ich navzájom porovnávať bez nutnosti zaoberanie sa počtom sekúnd od roku 1970 alebo indexy v tuple. Teraz si ukážeme, ako sa tieto objekty zakladajú a ako s nimi ďalej pracovať v jednotlivých moduloch.

Datetime ()

Veľmi významnou triedou v tejto knižnici je rovnomenná trieda datetime a jej metóda datetime(). Tú môžeme používať pre vytváranie inštancií, s ktorými budeme ďalej pracovať. Tiež poskytuje užitočné metódy, ktoré budeme hojne využívať.

Vytvorme si inštanciu dátumu a času z určitého roku, mesiaca a dňa:

import datetime

# datetime.datetime(rok, měsíc, den, hodina, minuta, sekunda, mikrosekunda)
d1 = datetime.datetime(2019, 11, 24)
print(d1)

Ak by sme chceli používať iba časť knižnice, ktorá sa vzťahuje k triede datetime, môžeme pozmeniť import do varianty:

from datetime import datetime

d1 = datetime(2019,11,24)
print(d1)

Metódy na datetime

Ďalej si ukážeme niekoľko metód na triede datetime.

Now ()

Metóda now() nám jednoducho umožní získať aktuálny dátum a čas:

import datetime

now = datetime.datetime.now()
print(now)

Táto metóda vytvorí inštanciu vopred spomínané triedy datetime.datetime, v ktorej môžeme nájsť aktuálne informácie. K jednotlivým údajom sa dostaneme veľmi ľahko a to pomocou atribútov year, month, day, hour, minute a second:

import datetime

now = datetime.datetime.now()

print("Datum:")
print("Rok: {}".format(now.year))
print("Měsíc: {}".format(now.month))
print("Den: {}".format(now.day))
print("Čas:")
print("{}:{}:{}".format(now.hour, now.minute, now.second))

Weekday ()

Metódu opäť voláme na vopred vytvorené inštanciu a zistí nám jej deň v týždni. Skúsme si ju zavolať na aktuálnom dátume a čase, ktorý tiež už vieme zistiť:

import datetime

now = datetime.datetime.now()

#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" }

den = dny_v_tydnu[now.weekday()]
print("Den v týdnu: {}".format(den))

Opäť tu musíme dať pozor na správne značenie: Pondelok = 0 - Nedeľa = 6.

Strftime ()

Táto metóda nám umožní vytvoriť použiteľný a ľahko čitateľný formát dátumu a času pre užívateľa:

import datetime

now = datetime.datetime.now()

text1 = now.strftime("%H:%M:%S")
text2 = now.strftime("Hodin:%H, Minut:%M, Sekund:%S")

text3 = now.strftime("Den:%d, Měsíc:%m, Rok:%Y")

print(text1)
print(text2)
print(text3)

Pri použití musíme vnútri metódy strftime() definovať, ako má náš chcený výstup vyzerať. Používa sa 6 špecifických znakov, ktoré ukazujú, čo sa má kde vypísať. Sú to:

  • %d - deň
  • %m - mesiac
  • %Y - rok
  • %H - hodina
  • %M - minúta
  • %S - sekunda
  • %a - skratka dňa v týždni
  • %A - deň v týždni
  • %w - deň v týždni - číselná hodnota
  • %b - skratka mesiaca (nie číselná podoba)
  • %B - mesiac (celý názov)

Strptime ()

Opačným spôsobom pracuje funkcia strptime(). Do tej vložíme dátum a čas zapísaný v textovej podobe, napr. Vložený užívateľom. Potom musíme špecifikovať, aký formát je použitý a funkcia nám vráti inštanciu datetime:

import datetime

#Předem zvolená informace
info = "25.5.2000 12:35"

date = datetime.datetime.strptime(info, "%d.%m.%Y %H:%M")
print(date)

V tejto metóde sa pre nás ukrýva veľa možností, a je len na nás, aký formát pre získavanie dátumu a času si zvolíme.

Práca s dátami

To, že všetko ukladáme ako inštancia tej istej triedy, nám prináša pri práci s dátami mnoho výhod.

Aritmetické operácie

S dátami môžeme vykonávať napríklad základné matematické operácie ako je sčítanie a odčítanie:

import datetime

#Založit aktuální datum
now = datetime.datetime.now()

#Založit datum v 1.1.2000
d2000 = datetime.datetime(2000, 1, 1)

d3 = now - d2000
print(d3)

V tomto prípade nám dátum d3 obsahuje počet dní, hodín, minút a sekúnd, ktoré ubehli od začiatku 2. tisícročia do dnešného dňa. Za podobným účelom môžeme ešte využiť funkciu total_seconds(), ktorá vráti počet sekúnd uběhlých medzi danými dvoma intervalmi.

Porovnávanie

Dve dáta môžeme medzi sebou aj porovnávať a to obyčajnými operátormi, ktoré by sme použili pri porovnávaní čísel:

import datetime

# Založí aktuální datum
now = datetime.datetime.now()

# Založí datum v 1.1.2000
d2000 = datetime.datetime(2000, 1, 1)

print(now > d2000) # Vrátí True
print(now == d2000) # Vrátí False

Timedelta ()

Pre ďalšie možnosti práce s časom je tu metóda timedelta(). Pokiaľ od seba dve dáta napríklad odpočítame, získame inštanciu triedy datetime.timedelta, čo nie je konkrétny dátum, ale interval (rozdiel) medzi nejakými dvoma dátumami. Tento objekt si môžeme tiež sami založiť. Môžeme tak napríklad ľahko zistiť, aký deň bude za 10 dní:

import datetime

# Dnešní den
now = datetime.datetime.now()

print("Dnešní datum: {}".format(now))

# Objekt timedelta s posunem o 10 dní
td10 = datetime.timedelta(10)

d1 = now + td10
d2 = now - td10
print("Datum za 10 dní: {}".format(d1))
print("Datum před 10 dny: {}".format(d2))

Metóda timedelta() nemusí byť vždy použitá s celými dňami. Ak chceme pracovať s inou hodnotou, máme tú možnosť. Pri zakladaní objektu timedelta môžeme navoliť mnoho parametrov:
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

Date ()

Všetky metódy, ktoré sme si spomenuli skôr, pracujú s objektmi datetime (dátum a čas). Ak by sme chceli využívať iba dátum, je vhodné miesto tohto používať objekt date. Ten potom nemá informáciu o dátume a čase, ktorá by nám inak mohla znepríjemňovať napr. Porovnávanie. Objekt date získame z objektu datetime pomocou metódy date():

import datetime

#Dnešní den
now = datetime.date.today()

print("Dnešní datum: {}".format(now))

d = datetime.date(2000, 12, 24)
print("Rok: {}".format(d.year))
print("Měsíc: {}".format(d.month))
print("Den: {}".format(d.day))

Nie je na tom nič zložité. Jediná zmena od datetime je v použití metódy today(), ktorá priamo nahradzuje now(). Všetky metódy používané vyššie sú s týmto formátom úplne kompatibilné. Ak teda vo svojich programoch nepotrebujeme časovej informácie, môžeme sa ich pomerne ľahko zbaviť.

V budúcej lekcii, Vlastnosti v Pythone , sa budeme zaoberať vlastnosťami v Pythone.


 

Predchádzajúci článok
Dátum a čas v Pythone
Všetky články v sekcii
Objektovo orientované programovanie v Pythone
Preskočiť článok
(neodporúčame)
Vlastnosti v Pythone
Článok pre vás napísal Marek Bečvář
Avatar
Užívateľské hodnotenie:
2 hlasov
Marek Bečvář
Aktivity