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.