Konvertering av datatyper i Python
I programmering er det fundamentalt å kunne transformere data fra én type til en annen. Dette kalles typekonvertering, og de fleste programmeringsspråk har innebygde mekanismer for å håndtere dette for standard datatyper.
Når det gjelder mer spesialiserte datatyper, som dato og klokkeslett, kreves det ofte ekstra moduler for å utføre konverteringer. Dette er spesielt sant for håndtering av dato- og tidsinformasjon, noe som tradisjonelt har vært en utfordring for mange utviklere. Heldigvis tilbyr Python innebygde moduler som gjør arbeidet med dato og klokkeslett betydelig enklere.
I denne artikkelen skal vi se nærmere på hvordan man konverterer en dato- og tidsstreng til et datetime-objekt i Python, ved hjelp av ulike moduler. Før vi går i gang med selve konverteringen, la oss først undersøke hvorfor en slik konvertering er nødvendig.
Hvorfor konvertere fra streng til datetime-objekt?
Når vi skal manipulere datoer, er det vanskelig å arbeide direkte med dem i strengformat. Konvertering til datetime-format muliggjør mer effektiv håndtering og manipulering. En dato representert som en streng er i prinsippet bare en tekststreng, og mangler de spesialiserte funksjonene som er tilgjengelige for et datetime-objekt. Det betyr at vi ikke kan bruke metoder som er spesielt utviklet for datobehandling; vi er begrenset til generelle strengfunksjoner.
Tenk deg at du må sammenligne to datoer. Hvis datoene er lagret som strenger, blir sammenligningen vanskelig. Ved å konvertere dem til datetime-objekter, kan vi bruke sammenligningsoperatorer, akkurat som vi gjør med tall.
Dette er bare ett eksempel. Det finnes mange andre situasjoner, som for eksempel å legge til eller trekke fra datoer, eller håndtere ulike tidssoner. I disse tilfellene er det en stor fordel å jobbe med date-time objekter i stedet for strenger.
La oss se på ulike metoder for å konvertere en datetime-streng til et datetime-objekt. Vi skal bruke den innebygde datetime
modulen, samt dateutil
biblioteket fra tredjepart.
Bruk av datetime
modulen
Python har en innebygd modul kalt datetime
som er utviklet for å håndtere dato- og klokkeslettinformasjon. Denne modulen inneholder flere klasser som forenkler datomanipulasjon. Vi skal spesifikt se på datetime.datetime
klassen.
Datetime.datetime
tilbyr en rekke metoder. Vi skal fokusere på strptime
metoden, som er spesielt nyttig for konvertering.
datetime.strptime
Datetime.strptime
metoden brukes til å konvertere en datostreng til et datetime-objekt. Den tar to argumenter: selve datostrengen og et format som beskriver hvordan datostrengen er strukturert. Metoden returnerer et datetime-objekt basert på den analyserte strengen.
Her er et eksempel:
from datetime import datetime
string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))
Når du kjører denne koden, vil du se følgende utskrift:
2022-12-19 21:37:56
Vi konverterte en streng til et datetime-objekt ved hjelp av datetime.strptime
. Det er viktig å sørge for at formatspesifikasjonen samsvarer nøyaktig med datostrengen. Hvis dette ikke stemmer, vil det enten oppstå en feil eller et feilaktig resultat.
Vi har brukt formatkoder for å definere hvordan datostrengen er strukturert. En fullstendig liste over formatkoder finnes i Pythons dokumentasjon.
Datetime.strptime
returnerer et komplett datetime-objekt. Hvis vi bare trenger datoen eller klokkeslettet, kan vi bruke henholdsvis date()
og time()
metodene til objektet.
from datetime import datetime
string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
## getting date separately
print("Date:", datetime.strptime(string, formatting).date())
## getting time separately
print("Time:", datetime.strptime(string, formatting).time())
Kjører du denne koden, får du følgende utskrift:
Date: 2022-12-19
Time: 21:37:56
Både date()
og time()
returnerer separate objekter som igjen har sine egne metoder for manipulering.
Vi må sørge for at strengen og formatet er korrekt definert for datetime.strptime
. Hvis de ikke samsvarer, vil det oppstå en feil. Vi kan håndtere slike feil ved å bruke try-except
blokker i Python. La oss se hvordan det gjøres:
from datetime import datetime
string = "19:12:2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))
Denne koden vil resultere i en feil fordi datostrengen ikke samsvarer med formatspesifikasjonen. La oss håndtere denne feilen ved hjelp av en try-except blokk:
from datetime import datetime
try:
string = "19:12:2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))
except ValueError as error:
print(error)
Ved å kjøre denne koden, vil feilmeldingen skrives ut uten å stoppe kjøringen av programmet.
time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'
Vi kan bruke den samme try-except blokken for å håndtere feil i parser.parse
metoden også. Det er en god praksis som hjelper til med å unngå at programmet kræsjer.
Det var alt om datetime
modulen. La oss se på dateutil
modulen.
Bruk av dateutil
Dateutil
modulen tilbyr utvidelser til datetime
modulen. Det gjør arbeidet med datoer og klokkeslett mye enklere med sine brukervennlige metoder. For å installere denne modulen, bruk følgende kommando:
pip install python-dateutil
Den metoden vi skal se nærmere på er dateutil.parser.parse
. Denne metoden gjør det enkelt å konvertere datostrenger til datetime-objekter.
parser.parse
parser.parse
metoden tar en datostreng og returnerer et tilsvarende datetime-objekt. En stor fordel med denne metoden er at vi ikke trenger å oppgi noe format; metoden analyserer automatisk formatet fra strengen. Her er et eksempel:
from dateutil import parser
string = "19-12-2022 09:37:56 PM"
print(parser.parse(string))
Når du kjører denne koden, vil du se følgende utskrift:
2022-12-19 21:37:56
Datostrengen må være på et format som parser.parse
kan gjenkjenne. Ved feil format, kan det oppstå feil. Det er mulig å se en liste over gyldige dato- og klokkeslettformater som denne metoden automatisk kan konvertere.
Siden parser.parse
returnerer et datetime-objekt, kan vi bruke date()
og time()
metodene for å hente ut de respektive komponentene, akkurat som vi gjorde med datetime
modulen. La oss se hvordan det gjøres:
from dateutil import parser
string = "19-12-2022 09:37:56 PM"
print("Date:", parser.parse(string).date())
print("Time:", parser.parse(string).time())
Kjører vi denne koden, får vi følgende utskrift:
Date: 2022-12-19
Time: 21:37:56
Som du ser, er dateutil
enklere å bruke for datohåndtering sammenlignet med standardbiblioteket. Du kan utforske modulen i detalj ved å lese dokumentasjonen.
Konklusjon
Vi har sett hvordan vi kan konvertere datostrenger til datetime-objekter ved hjelp av både den innebygde datetime
modulen og tredjepartsbiblioteket dateutil
. I tillegg til disse finnes det også en innebygd modul kalt time
som kan brukes til lignende konverteringer. Du kan prøve å bruke denne modulen på egenhånd. Det skal være enkelt, da du allerede har lært hvordan man bruker de to andre.
Det finnes også andre biblioteker som kan utføre den samme oppgaven. Modulene som ble presentert i denne artikkelen er de mest brukte og standardiserte. Det er opp til deg å utforske disse andre bibliotekene, og velge det som passer best for dine behov.
Du kan også utforske hvordan man beregner tidsforskjeller i Python.
Lykke til med kodingen! 🙂