Osa 7

Tid och datum

Objektet datetime

Pythons datetime-modul innehåller funktionen now, som returnerar ett datetime-objekt med det nuvarande datumet och tidpunkten. Så här ser det normalt ut när man skriver ut ett datetime-objekt:

from datetime import datetime

tid = datetime.now()
print(tid)
Exempelutskrift

2020-10-13 12:46:49.311393

Du kan också definiera objektet själv:

from datetime import datetime

tid = datetime(1952, 12, 24)
print(tid)
Exempelutskrift

1952-12-24 00:00:00

Tidpunkten är vid midnatt om vi inte själv definierar den.

Olika element i datetime-objektet kan kommas åt på följande sätt:

from datetime import datetime

tid = datetime(1952, 12, 24)
print("Dag:", tid.day)
print("Månad:", tid.month)
print("År:", tid.year)
Exempelutskrift

Dag: 24 Månad: 12 År: 1952

Tidpunkten under dagen kan också specificeras. Precisionen kan variera:

from datetime import datetime

tid1 = datetime(2020, 6, 30, 13, 00) # 30/6 2020 kl 13:00
tid2 = datetime(2020, 6, 30, 18, 45) # 30/6 2020 kl 18:45

Jämföra tider och räkna skillnaden mellan dem

De bekanta jämförelseoperatorerna fungerar också för datetime-objekt:

from datetime import datetime

nu = datetime.now()
midsommar = datetime(2020, 6, 20)

if nu < midsommar:
    print("Inte än midsommar")
elif nu == midsommar:
    print("Trevlig midsommar!")
elif nu > midsommar:
    print("Midsommaren kom och gick")
Exempelutskrift

Midsommaren kom och gick

Skillnaden mellan två datetime-objekt kan enkelt räknas med subtraktionsoperatorn:

from datetime import datetime

nu = datetime.now()
midsommar = datetime(2020, 6, 20)

skillnad = midsommar - nu
print("Det är ännu", skillnad.days, "dagar till midsommar")
Exempelutskrift

Det är ännu 37 dagar till midsommar

Obs! Resultatet för en subtraktion med datetime-objekt är ett timedelta-objekt. Det är inte lika flexibelt som datetime-objektet. Du kan till exempel komma åt antalet dagar i ett timedelta-objekt, men inte antalet år, eftersom längden på ett år varierar. Ett timedelta-objekt innehåller attributen days, seconds och microseconds. Andra storheter kan ges som argument och de konverteras automatiskt till korrekt format.

Addition med datetime- och timedelta-objekt är också möjligt. Resultatet är ett datetime-objekt där det specificerade antalet dagar (eller veckor, sekunder o.s.v.) är adderade:

from datetime import datetime, timedelta
midsommar = datetime(2020, 6, 20)

vecka = timedelta(days=7)
vecka_senare = midsommar + vecka

print("En vecka efter midsommar är", vecka_senare)

lang_tid = timedelta(weeks=32, days=15)

print("32 veckor och 15 dagar efter midsommar är", midsommar + lang_tid)
Exempelutskrift

En vecka efter midsommar är 2020-06-27 00:00:00 32 veckor och 15 dagar efter midsommar är 2021-02-14 00:00:00

Vi kollar ännu hur det ser ut med högre precision:

nu = datetime.now()
midnatt = datetime(2020, 6, 30)
skillnad = midnatt-nu
print(f"Det är ännu {skillnad.seconds} sekunder till midnatt")
Exempelutskrift

Det är ännu 8188 sekunder till midnatt

Loading
Loading

Formatera tid och datum

Modulen datetime innehåller metoden strftime som kan användas för att formatera hur ett datum representeras som sträng. Till exempel följande kodsnutt kommer att skriva ut det nuvarande datumet i formatet dd.mm.åååå och därefter datumet och tiden i ett annat format:

from datetime import datetime

tid = datetime.now()
print(tid.strftime("%d.%m.%Y"))
Exempelutskrift

04.02.2020

Tidsformatering använder specifika tecken för att indikera ett visst format. Här är ett antal tecken (flera finns i Pythons dokumentation):

FörkortningBetydelse
%ddag (01–31)
%mmånad (01–12)
%Yår (fyra siffor)
%Htimme (24 timmars format)
%Mminut (00–59)
%Ssekund (00–59)

Du kan också specificera vilket tecken som används för att skilja elementen i ett datum, så som du såg i exemplet ovan.

Formatering för datetime fungerar också åt det andra hållet, det vill säga om du tar emot ett datum som en sträng från en användare och vill få det i datetime-format. Använd då metoden strptime:

from datetime import datetime

syote = input("Ange din födelsetid i formatet dd.mm.åååå: ")
tid = datetime.strptime(syote, "%d.%m.%Y")

if tid < datetime(2000, 1, 1):
    print("Du föddes på förra årtusendet")
else:
    print("Du föddes på det här årtusendet")
Exempelutskrift

Ange din födelsetid i formatet dd.mm.åååå: 5.11.1986 Du föddes på förra årtusendet

Loading
Loading...
:
Loading...

Log in to view the quiz

Du har nått slutet av den här delen! Fortsätt till nästa del:

Se dina poäng genom att klicka på cirkeln nere till höger av sidan.