Sådan konverteres streng til Datetime i Python

Konvertering fra én type data til en anden type data er afgørende i ethvert programmeringssprog. Næsten alle programmeringssprog understøtter typekonverteringer for indbyggede datatyper.

Tilpassede datatyper som datetime har brug for ekstra moduler til konverteringer. Vi har brug for moduler, især til dato- og tidskonverteringer, da det aldrig har været nemt for programmører at arbejde med dem. Heldigvis har python indbyggede moduler til at arbejde med datetime.

Vi vil lære, hvordan man konverterer en datetime-streng til et datetime-objekt i Python ved hjælp af forskellige moduler. Før vi springer ud i det, lad os se, hvorfor vi skal konvertere det i første omgang.

Hvorfor skal vi konvertere en datetime-streng til et datetime-objekt?

Når vi skal arbejde med datoer, er det ikke nemt at arbejde, hvis de er i strengformatet. Konvertering af dem til datetime-format gør det meget nemt at arbejde med dem. Datoer i strenge er som normale strenge. Det vil ikke have nogen specielle metoder til at arbejde med datoer. Det vil have generelle strengmetoder, som vi ikke har brug for, mens vi arbejder med datoer.

Lad os sige, at vi skal sammenligne to datoer. Hvis de er i strengformat, kan vi sammenligne dem korrekt. Hvis de er i datetime-format, kan vi bruge sammenligningsoperatorerne som tal.

Dette er kun et scenarie, hvor konvertering til datetime-format gør tingene nemme. Der er masser af scenarier som at tilføje datoer, trække fra, håndtere tidszoner osv., hvor konvertering af datetime-streng til datetime-objekt gør vores liv nemmere end nogensinde.

  Sådan aktiveres det nye Reddit-design

Med det sagt, lad os se forskellige måder at konvertere en datetime-streng til et datetime-objekt. Vi vil bruge indbyggede datetime og tredjeparts dateutil-moduler til at konvertere datetime-strengen til datetime-objekt. Lad os starte med datetime-modulet

Bruger dato og klokkeslæt

Datetime er et indbygget modul i Python, som bruges til at arbejde med datoer og klokkeslæt. Der er mange klasser i dette modul, der hjælper os med at arbejde med datoer og klokkeslæt. Vi vil bruge datetime.datetime-klassen til konverteringen.

Datetime.datetime har mange metoder. Vi er interesserede i strptime-metoden, som vil hjælpe os med konverteringen. Lad os tjekke det.

datetime.strptime

Datetime.strptime-metoden bruges til at konvertere datetime-strengen til et datetime-objekt. Det kræver to strenge, den ene er datetime-streng, og den anden er formatet på den datetime-streng. Og det returnerer datetime-objektet.

Lad os se 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))

Hvis du kører ovenstående kode, vil du se følgende output.

2022-12-19 21:37:56

Vi har taget en datetime-streng og konverteret den til datetime-objekt ved hjælp af metoden datetime.strptime. Sørg for, at det format, du angiver til metoden, svarer nøjagtigt til dato- og tidsstrengen. Hvis de ikke matchede, kan du få en fejl eller forkert output.

Vi har brugt nogle formateringskoder til datetime-formatet. Du kan henvise til alle formatkoderne i dokumenterne.

Datetime.strptime-metoden returnerer komplet datetime. Hvis du ønsker at få dato og klokkeslæt separat, kan vi bruge datetime-objektets datetime-metoder. Lad os se koden.

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

Kør ovenstående kode, og du vil se følgende output.

Date: 2022-12-19
Time: 21:37:56

Metodernes dato og klokkeslæt vil returnere deres objekter hhv. De vil igen have deres respektive metoder for datoer og tidspunkter.

  6 bedste bygningsinformationsmodelleringssoftware til designere og bygherrer

Vi har leveret de korrekte strenge og formater til metoden datetime.strptime, som vi har set ovenfor. Hvis vi ikke har angivet dem korrekt, får vi fejl. Lad os se, hvordan man håndterer disse fejl. Kør følgende kode.

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

Ovenstående kode vil give en fejl, fordi formateringen ikke stemmer overens med datetime-strengen. For at håndtere denne slags fejl kan vi bruge Pythons’ try-except. Lad os tilføje det.

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)

Kør nu koden igen. Du vil se følgende fejlmeddelelse uden at bryde koden.

time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'

På samme måde kan vi tilføje try-undtagen for den kommende parser.parse-metode også. Det hjælper os med at undgå at knække koden i midten. Dette er ikke specielt relateret til denne tutorial kontekst, men det vil minde dig om at bruge det i din kode.

Det var det for datetime-modulet. Lad os gå til næste moduldatotil.

Bruger dateutil

Modulet dateutil giver udvidelser til datetime-modulet. Det gør arbejdet med datoer og klokkeslæt meget nemmere med en masse metoder med nem brug. Lad os installere modulet med følgende kommando.

pip install python-dateutil

Metoden, som vi er interesserede i, er dateutil.parser.parse. Lad os se, hvordan man konverterer datetime-streng til datetime-objekt.

  13 grunde til at vælge AWS som din cloud-udbyder

parser.parse

Metoden parser.parse vil tage en datetime-streng og konvertere den til et respektivt datetime-objektformat. Vi behøver ikke at angive nogen formatering for denne metode. Det vil automatisk konvertere den givne datetime-streng til datetime-objekt. Lad os se et eksempel.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print(parser.parse(string))

Hvis du kører ovenstående kode, vil du se følgende output.

2022-12-19 21:37:56

Datetime-strengen skal være i et bestemt format, som parser.parse-metoden accepterer. Det vil give en fejl, hvis datetime-strengformatet ikke er som det ønskede format. Du kan kontrollere alle de datetime-strengformater, som den accepterer for automatiske konverteringer.

Da parser.parse-metoden returnerer datetime-objektet, kan vi få adgang til dato- og tidsobjekterne separat, som vi har set med datetime-modulet. Lad os se koden.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print("Date:", parser.parse(string).date())
print("Time:", parser.parse(string).time())

Du kan se nedenstående output, hvis du kører ovenstående kode.

Date: 2022-12-19
Time: 21:37:56

Som du kan se gør dateutil det lettere at arbejde med datoerne og tidspunkterne sammenligneligt. Du kan udforske modulet i docs.

Konklusion

Vi har brugt et indbygget modul og et tredjepartsmodul til at konvertere datetime-strengen til et DateTime-objekt. Der er et andet indbygget modul kaldet tid, hvormed vi kan konvertere datetime-strengen til et DateTime-objekt, der ligner datetime og dateutil-moduler. Prøv det selv. Det vil ikke være svært, da du allerede har gjort en lignende ting med andre moduler.

Der kan være flere biblioteker, hvormed vi kan opnå det samme. De moduler, som vi har brugt i ting tutorial er standard og meget brugt. Du kan udforske mere om andre moduler og vælge det bedste, der passer til dig.

Du kan også undersøge, hvordan man beregner tidsforskel i python.

God kodning 🙂