V Pythonu imamo več načinov obravnave časa in datuma.Pri tem si pomagamo
z ustreznimi moduli (knjižnicami), ki jih moramo na začetku programa
uvoziti.
Pythonovova modula time in calendar pomagata pri sledenju datuma in časa. Imamo tudi modul datetime, ki tudi nudi razrede za nadzor datuma in časa.
Imamo dva dva tipa časovnih in datumskih objektov (naivni in zavedajoči se (aware)). Slednji upoštevajo tudi časovni pas in prehod na zimski čas. Naivni način je bolj preprost.
Python običajno obravnava čas kot skupino devetih števil. Pomen teh števil v tej terki (začenši z indeksom 0) je naslednji
Indeks | Pomen | Primer |
---|---|---|
0 | 4 mestno število za leto) | 2016 |
1 | Mesec | 1 - 12 |
2 | Dan | 1 - 31 |
3 | Ura | 0 - 23 |
4 | Minuta | 0 - 59 |
5 | Sekunda | 0 - 60 |
6 | Dan v tednu | 0 - 6 (0 označuje ponedeljek |
7 | Dan v letu | 1 - 366 |
8 | Prehod v zimski čas | -1, 0, 1, -1 |
Pri Pythonu lahko s tiki merimo čas v delčkih, izraženih v sekundah začenši s 1. januarjem 1990 ob 12.00.
Za delo s tiki moramo v program najprej uvoziti modul time:
Primer:
import time ticktock = time.time(); print("Stevilo tikov:", ticktock) |
Dobili bi izpis časa v tikih:
Stevilo tikov: 1548237446.6856797
Izpis
trenutnega časa bi dobili tako:
import time; cas = time.localtime(time.time()) print ("Leto:", cas[0]) print ("Mesec:", cas[1]) print ("Dan:", cas[2]) print ("Ura:", cas[3]) print ("Minuta:", cas[4]) |
Kar bi dalo naslednji izpis:
Leto: 2019
Mesec: 1
Dan: 23
Ura: 11
Minuta: 15
Lahko pa izpišemo tudi čas s pomočjo modula datetime:
Primer:
import datetime x = datetime.datetime.now() print(x) print("Danasnji datum:", x.strftime('%Y-%m-%d') ) print("Leto:", x.year) print("Mesec:", x.month) print("Dan:", x.day) print("Ura:", x.hour) print("Minuta:", x.minute) |
Ta programček bi izpisal trenutni čas v naslednji obliki:
2019-01-23 10:30:16.189659
Danasnji datum: 2019-01-23
Leto: 2019
Mesec: 1
Dan: 23
Ura: 10
Minuta: 30
Prva vrstica kaže izpis v datuma in časa v kompaktni obliki:
Tako dobimo leto, mesec, dan, uro, minute, sekunde in mikrosekunde trenutnega časa
V vaslednjih vrsticah tega primera pa vidimo bolj pregleden izpis leta,
meseca, dneva...
To omogoča modul calendar, ki ponuja več metod za delo s koledarji. Poglejmo si preprost program:
import calendar koledar = calendar.month(2016, 6) print("Koledar za junij 2016 je:") print (koledar) |
Dobili bi naslednji izpis:
Koledar za junij 2016 je:
June 2016
Mo Tu We Th Fr Sa Su
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Na voljo imamo konstruktor, ki omogoča tvorbo objekta date z danim leto, mesecem in dnevom:
Primer takega konstruktorja:
import datetime x = datetime.datetime(2020, 5, 17) print(x) |
S konstruktorjem datetime() bi lahko podali tudi uro, minuto, sekundo, mikrosekundo in časovni pas. Vendar so ti parametri opcijski in jih lahko opustimo. Privzeto vrednost imajo enako 0, za časovni pas pa je privzeta vrednost None.
Uporabljamo ga za predstavitev trajanja, torej za razliko med dvema datuma ali časoma. Pri tem uporabljamo naslednjo sintakso
datetime.timedelta([days, [,seconds [,microseconds [,milliseconds [, minutes [,hours [,weeks]]]]]])
V zgornjem scenariju so vsi argumenti opcijski. Njihova privzeta vrednost je 0.
Primer uporabe:
Naslednji program bo vsako sekudno izpisal besedico "zbudil sem se" (vmes pa bo spal). Po 10 sekundah bo programa konec. Kaj takega pride v poštev pri kakšnih časovno omejenih igricah :)
import datetime, time then = datetime.datetime.now() + datetime.timedelta(seconds=10) while then > datetime.datetime.now(): print ('Zbudil sem se') time.sleep(1) |
Objekt datetime ima še metodo strftime() za oblikovanje (formatiranje) objektov date v berljive nize.
Ta metoda ima en parameter, ki definira format vrnjenega niza:
import datetime x = datetime.datetime(2018, 6, 1) print(x.strftime("%B")) # izpis meseca |
In izpis, ki bi ga dobili:
June
Spodnja tabela prikazuje možne kode formata:
Navodilo | DOpis | Primer |
---|---|---|
%a | Dan v tednu, kratka verzija | Wed |
%A | Dan v tednu, daljša verzija | Wednesday |
%w | Dan v tednu kot številka 0-6, 0 je nedelja | 3 |
%d | Dan v mesecu 01-31 | 31 |
%b | Ime meseca, krajša verzija | Dec |
%B | Ime meseca, daljša verzija | December |
%m | Mesec kot številka 01-12 | 12 |
%y | Leto, krajša verzija, brez stoletja | 18 |
%Y | Leto, daljša verzija | 2018 |
%H | Ura 00-23 | 17 |
%I | Ura 00-12 | 05 |
%p | AM/PM | PM |
%M | Minute 00-59 | 41 |
%S | Sekunde 00-59 | 08 |
%f | Mikrosekunde 000000-999999 | 548513 |
%z | UTC odmik | +0100 |
%Z | Časovni pas | UCT |
%j | Day number of year 001-366 | 365 |
%U | Številka tedna v letu, Nedelja kot prvi dan v tednu, 00-53 | 52 |
%W | Številka tedna v letu, Ponedeljek kot prvi dan tedna, 00-53 | 52 |
%c | Lokalna verzija datuma in časa | Mon Dec 31 17:41:00 2018 |
%x | Lokalna verzija datuma | 12/31/18 |
%X | Lokalna verzija časa | 17:41:00 |
%% | Znak % | % |