Hur man beräknar tidsskillnaden i Python

By rik

När du hanterar datum och klockslag i Python, är det ofta nödvändigt att räkna ut skillnaden i tid. Denna guide kommer att visa dig hur man beräknar skillnaden mellan två tidpunkter i timmar, minuter och sekunder.

Efter att ha läst denna handledning kommer du att ha lärt dig:

  • Hur man använder Pythons datetime-modul för att manipulera datum och tid,
  • Vad ett timedelta-objekt representerar och hur man använder det, samt
  • Hur man beräknar tidsskillnaden mellan två godtyckliga tidpunkter – angivet i timmar, minuter och sekunder.

Låt oss sätta igång!

Användning av Pythons datetime-modul

För att hantera datum och tid i Python, använder man modulen datetime. Denna modul ingår i Pythons standardbibliotek, så den kan importeras direkt i din arbetsmiljö:

import datetime

För att beräkna tidsskillnaden behöver du skapa två olika tidpunkter. Du kan välja att skapa:

  • Två datumobjekt,
  • Två tidsobjekt, eller
  • En kombination av både datum och tid – ett datetime-objekt.

Skapa ett datumobjekt i Python

Låt oss börja med att importera date-klassen från datetime-modulen. Ett datumobjekt skapas med syntaxen datetime.date(<år>, <månad>, <dag>). Här är ett exempel där vi skapar ett datumobjekt kallat date1:

from datetime import date
date1 = datetime.date(2022,3,27)
print(date1)

# Output: 2022-03-27

Du kan testa koden genom att använda en online Python-kompilator eller genom att installera Python på din egen dator.

Som du kan se, när datumet skrivs ut, formateras det enligt formatet ÅÅÅÅ-MM-DD.

Observera: Månaden ska anges som ett heltal utan inledande nollor. Det är lätt att automatiskt lägga till en inledande nolla när man skriver datum.

Till exempel, för att ange ett datum i juni, den sjätte månaden, använder du 6 och inte 06.

Om du till exempel kör följande kod, där månaden angetts som 03 i stället för 3, får du ett syntaxfel:

date1 = datetime.date(2022,03,27)

print(date1)

# Error Message
File "<ipython-input-12-6eb72084e6ce>", line 1
    date1 = datetime.date(2022,03,27)
                                ^
SyntaxError: invalid token

Låt oss nu se hur man skapar ett tidsobjekt i Python.

Skapa ett tidsobjekt i Python

För att skapa ett tidsobjekt importerar vi time-klassen. Alla Python-tidsobjekt skapas med time-klassen genom att ange attributen: timme, minut, sekund och mikrosekund.

Alla dessa attribut är valfria. Om du inte anger ett visst attribut, exempelvis sekunden, sätts det till 0 som standard.

Följande kod visar hur du skapar ett tidsobjekt kallat time1. Precis som med datumobjektet kan tidsobjektet skrivas ut för att se det formaterade tidsangivelsen.

from datetime import time
time1 = datetime.time(13,27,45,4600)
print(time1)

# Output: 13:27:45.004600

Skapa ett datetime-objekt i Python

Som du har sett innehåller datumobjektet ingen information om klockslaget och tidsobjektet innehåller inte någon information om datumet.

I praktiken behöver man oftast information om både datum och tid. Därför rekommenderas att använda datetime-klassen istället.

Du kan skapa datetime-objekt enligt följande:

dt1 = datetime.datetime(2022,3,27,13,27,45,46000)
print(dt1)

# Output: 2022-03-27 13:27:45.046000

Låt oss skapa ett till datetime-objekt, dt2, utan sekund-attributet. Du kommer att se att det sätts till 0 – standardvärdet.

dt2 = datetime.datetime(2022,6,30,14,28)
print(dt2)

# Output: 2022-06-30 14:28:00

Hittills har du lärt dig att skapa tidpunkter i Python – som datum, klockslag och datetime-objekt. Det är nu dags att se hur du kan beräkna skillnaden mellan två valfria tidpunkter.

Fortsätt till nästa avsnitt för att lära dig mer.

Användning av timedelta-objekt i Python

I Python representerar timedelta ett tidsintervall. Det är skillnaden mellan två datum, klockslag eller datetime-objekt.

Om du adderar eller subtraherar två datum-, klockslag eller datetime-objekt, får du ett timedelta-objekt. Detta objekt har användbara attribut och metoder som kan hjälpa till att beräkna skillnaden i tid.

Låt oss nu beräkna skillnaden mellan de två datetime-objekten dt1 och dt2.

dt1 = datetime.datetime(2022,3,27,13,27,45,46000)
dt2 = datetime.datetime(2022,6,30,14,28)
tdelta = dt2 - dt1
print(tdelta)
print(type(tdelta))

# Output
95 days, 1:00:14.954000
<class 'datetime.timedelta'>

I koden ovan kan du se att variabeln tdelta innehåller tidsskillnaden mellan dt1 och dt2. Typen av tdelta verifieras med Pythons inbyggda type()-funktion och visar att det är ett timedelta-objekt.

Låt oss nu gå vidare och titta på ett annat exempel.

Beräkna tidsskillnaden mellan två datum

Låt oss ta ett enkelt men intressant exempel.

Problem: Att beräkna tidsskillnaden mellan dagens datum och din födelsedag.

För att göra detta, sätt dagens datum som den första tidpunkten och din födelsedag som den andra tidpunkten.

Som ett första steg, låt oss skapa två datetime-objekt:

  • Ett för dagens datum, som vi kallar idag, och
  • Ett annat för din födelsedag, som vi kallar födelsedag.

Klassen datetime har metoden now(), som ger dig det aktuella lokala datumet och tiden. Så låt oss använda detta för idag – vår referenspunkt.

today = datetime.datetime.now()
print(today)

# Sample Output: 2022-01-22 09:10:18.489538

I koden nedan ersätter du bday med din födelsedag för att räkna ut hur lång tid det är kvar till din födelsedag i år.

Om du läser detta efter att din födelsedag har passerat, kan du sätta bday till din nästa födelsedag.

bday = datetime.datetime(2022,8,30,11,59)
print(bday)

# Sample Output: 2022-08-30 11:59:00

Nästa steg är att beräkna time_diff, som är ett timedelta-objekt, enligt tidigare. Subtrahera helt enkelt idag från din födelsedag så får du tidsskillnaden.

time_diff = bday - today
print(f"Din födelsedag är om {time_diff}")

# Output
Din födelsedag är om 220 days, 2:46:00.127416

För att få reda på antalet dagar kvar, använder du attributet daystime_diff:

tdays = time_diff.days
print(f"Din födelsedag är om {tdays} dagar.")

# Output
Din födelsedag är om 220 dagar.

Beräkna tidsskillnaden i sekunder

Låt oss nu ta reda på hur många sekunder det är kvar till din födelsedag.

För att beräkna den totala tidsskillnaden i sekunder, använder du metoden total_seconds()timedelta-objektet time_diff.

tsecs = time_diff.total_seconds()
print(f"Din födelsedag är {tsecs} sekunder bort.")

# Output
Din födelsedag är 19017960.127416 sekunder bort.

Tja, det är lång väntan!

Nu vet du hur man beräknar skillnaden mellan två tidpunkter i sekunder.

Låt oss gå igenom några grunder. En dag består av 24 timmar, en timme är 60 minuter och 60 sekunder utgör en minut.

Detta illustreras i bilden nedan:

För att omvandla från sekunder till minuter, timmar och dagar kan du använda följande tabell och dividera med motsvarande omvandlingsfaktor.

Tidsomvandlingstabell

Från sekunder till Dividera med
Minuter 60
Timmar 3600 (60 * 60)
Dagar 86400 (60 * 60 * 24)

I nästa avsnitt kommer vi att omvandla tidsskillnaden i sekunder till minuter och timmar.

Beräkna tidsskillnaden i minuter

För att få tidsskillnaden i minuter, behöver du bara dividera det totala antalet sekunder med 60.

Låt oss dividera tsecs med 60 och lagra resultatet i en variabel som heter tmins:

tmins = tsecs/60
print(f"Din födelsedag är {tmins} minuter bort.")

# Output
Din födelsedag är 316966.0021236 minuter bort.

Beräkna tidsskillnaden i timmar

Nu när du har räknat ut tidsskillnaden i minuter kan du dividera den med 60 för att få skillnaden i timmar. Du kan också dividera det totala antalet sekunder med 60*60 = 3600.

thrs = tsecs/(60*60)
print(f"Din födelsedag är {thrs} timmar bort.")

# Output
Din födelsedag är 5282.76670206 timmar bort.

Nu har du lärt dig hur man beräknar tidsskillnaden i valfri enhet.

Sammanfattning

I den här guiden har du lärt dig hur du:

  • Skapar och hanterar datum och klockslag med Pythons datetime-modul,
  • Använder timedelta-objekt för att få ett tidsintervall, eller tidsskillnad, samt
  • Beräknar tidsskillnaden i sekunder, minuter och timmar.

Hoppas att du har haft nytta av denna guide. Nu när du vet hur man beräknar tidsskillnad i Python, är det dags att öva!

Lycka till med lärande och kodning!

Lär dig mer om hur man skriver ”lika med” eller ”inte lika med”-kod eller skapa ett ormspel i Python här.