Osa 7

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)
Esimerkkitulostus

2020-04-02 12:46:49.311393

Toinen tapa muodostaa aikaolio on määrittää ajanhetki itse:

from datetime import datetime

aika = datetime(1952, 12, 24)
print(aika)
Esimerkkitulostus

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)
Esimerkkitulostus

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. Seuraava koodi antaa näytteen tästä:

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")
Esimerkkitulostus

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ää")
Esimerkkitulostus

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)
Esimerkkitulostus

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")
Esimerkkitulostus

keskiyöhön on vielä 8188 sekuntia

Loading
Loading

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"))
Esimerkkitulostus

04.02.2020

Ajan muotoilussa käytetään tiettyjä kirjainlyhenteitä. Seuraavassa listassa on joitakin mahdollisia lyhenteitä (täydellinen lista on Pythonin dokumentaatiossa):

LyhenneMerkitys
%dpäivä (01–31)
%mkuukausi (01–12)
%Yvuosi nelinumeroisena
%Htunnit 24 tunnin formaatissa
%Mminuutit (00–59)
%Ssekunnit (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")
Esimerkkitulostus

Anna syntymäpäiväsi muodossa pv.kk.vvvv: 5.11.1986 Synnyit viime vuosituhannella

Loading
:
Loading...
:
Loading...

Kirjaudu sisään nähdäksesi tehtävän.

Seuraava osa: