Aikojen käsittely
Aikaolio
Moduulin datetime funktio now antaa aikaolion, jossa on nykyinen päivämäärä ja kellonaika. Voimme esimerkiksi tulostaa nykyhetken päivämäärän ja kellonajan näin:
from datetime import datetime
aika = datetime.now()
print(aika)
2020-10-13 12:46:49.311393
Toinen tapa muodostaa aikaolio on määrittää ajanhetki itse:
from datetime import datetime
aika = datetime(1952, 12, 24)
print(aika)
1952-12-24 00:00:00
Kun emme antaneet kellonaikaa, oletuksena on, että kyseessä on keskiyö.
Voimme hakea aikaoliosta ajan osia tähän tapaan:
from datetime import datetime
aika = datetime(1952, 12, 24)
print("Päivä:", aika.day)
print("Kuukausi:", aika.month)
print("Vuosi:", aika.year)
Päivä: 24 Kuukausi: 12 Vuosi: 1952
Aikaoliolle voidaan antaa myös kellonaika halutulla tarkkuudella. Esimerkiksi:
from datetime import datetime
pv1 = datetime(2020, 6, 30, 13, 00) # 30.6.2020 klo 13.00
pv2 = datetime(2020, 6, 30, 18, 45) # 30.6.2020 klo 18.45
Aikojen vertailu ja ero
Voimme vertailla aikoja samaan tapaan kuin lukuja käyttämällä tuttuja vertailuoperaattoreita:
from datetime import datetime
nyt = datetime.now()
juhannus = datetime(2020, 6, 20)
if nyt < juhannus:
print("Ei ole vielä juhannus")
elif nyt == juhannus:
print("Hyvää juhannusta!")
elif nyt > juhannus:
print("Juhannus on mennyt")
Juhannus on mennyt
Voimme myös laskea kahden ajankohdan eron vähennyslaskuna:
from datetime import datetime
nyt = datetime.now()
juhannus = datetime(2020, 6, 20)
ero = juhannus - nyt
print("Juhannukseen on vielä", ero.days, "päivää")
Juhannukseen on vielä 37 päivää
Huomaa, että vähennyslaskun tuloksena on timedelta-olio, jolta voi kysyä vain rajoitetusti ajan yksikköjä. Voimme kysyä päivien määrän, mutta emme voi kysyä esimerkiksi vuosien määrää, koska vuoden pituus vaihtelee.
Timedelta-olion avulla on myös mahdollista selvittää, mikä ajanhetki saadaan kun tietty aika (viikkoina ja päivinä) lisätään johonkin ajanhetkeen:
from datetime import datetime, timedelta
juhannus = datetime(2020, 6, 20)
viikko = timedelta(days=7)
viikon_paasta = juhannus + viikko
print("Kun viikko juhannuksesta kuluu on", viikon_paasta)
pitka_aika = timedelta(weeks=32, days=15)
print("Kun juhannuksesta kuluu 32 viikkoa ja 15 päivää on", juhannus + pitka_aika)
Kun viikko juhannuksesta kuluu on 2020-06-27 00:00:00 Kun juhannuksesta kuluu 32 viikkoa ja 15 päivää on 2021-02-14 00:00:00
Timedelta-olio toimii viikkojen ja päivien lisäksi tarkemmallakin tasolla:
nyt = datetime.now()
keskiyo = datetime(2020, 6, 30)
erotus = keskiyo-nyt
print(f"keskiyöhön on vielä {erotus.seconds} sekuntia")
keskiyöhön on vielä 8188 sekuntia
Aikojen muotoilu
Voimme muotoilla ajanhetken haluamallamme tavalla strftime-metodin avulla. Esimerkiksi seuraava koodi tulostaa nykyisen päivämäärän muodossa pp.kk.vvvv
:
from datetime import datetime
aika = datetime.now()
print(aika.strftime("%d.%m.%Y"))
04.02.2020
Ajan muotoilussa käytetään tiettyjä kirjainlyhenteitä. Seuraavassa listassa on joitakin mahdollisia lyhenteitä (täydellinen lista on Pythonin dokumentaatiossa):
Lyhenne | Merkitys |
---|---|
%d | päivä (01–31) |
%m | kuukausi (01–12) |
%Y | vuosi nelinumeroisena |
%H | tunnit 24 tunnin formaatissa |
%M | minuutit (00–59) |
%S | sekunnit (00–59) |
Voimme myös tehdä muotoilun toiseen suuntaan, jos esimerkiksi haluamme muuttaa käyttäjän antaman ajanhetken aikaolioksi. Tämä onnistuu metodilla strptime:
from datetime import datetime
syote = input("Anna syntymäpäiväsi muodossa pv.kk.vvvv: ")
aika = datetime.strptime(syote, "%d.%m.%Y")
if aika < datetime(2000, 1, 1):
print("Synnyit viime vuosituhannella")
else:
print("Synnyit tällä vuosituhannella")
Anna syntymäpäiväsi muodossa pv.kk.vvvv: 5.11.1986 Synnyit viime vuosituhannella
Log in to view the quiz