Hur man konverterar sträng till Datetime i Python

Att konvertera från en typ av data till en annan typ av data är avgörande i alla programmeringsspråk. Nästan alla programmeringsspråk stöder typkonverteringar för inbyggda datatyper.

Anpassade datatyper som datetime behöver extra moduler för konverteringar. Vi behöver moduler, speciellt för datetime-konverteringar eftersom det aldrig varit lätt för programmerare att arbeta med dem. Lyckligtvis har python inbyggda moduler för att arbeta med datetime.

Vi kommer att lära oss hur man konverterar en datetime-sträng till ett datetime-objekt i Python med hjälp av olika moduler. Innan vi hoppar in i det, låt oss se varför vi måste konvertera det i första hand.

Varför behöver vi konvertera en datetime-sträng till ett datetime-objekt?

När vi ska jobba med datum är det inte lätt att jobba om de är i strängformat. Att konvertera dem till datetime-format gör det mycket enkelt att arbeta med dem. Datum i strängar är som vanliga strängar. Det kommer inte att ha några speciella metoder för att arbeta med datum. Det kommer att ha allmänna strängmetoder, som vi inte kommer att behöva när vi arbetar med datum.

Låt oss säga att vi måste jämföra två datum. Om de är i strängformat kan vi jämföra dem korrekt. Om de är i datetime-format kan vi använda jämförelseoperatorerna som siffror.

Detta är bara ett scenario där konvertering till datetime-format gör det enkelt. Det finns många scenarier som att lägga till datum, subtrahera, hantera tidszoner, etc., där konvertering av datetime-sträng till datetime-objekt gör våra liv enklare än någonsin.

Med det sagt, låt oss se olika sätt att konvertera en datetime-sträng till ett datetime-objekt. Vi kommer att använda inbyggda datetime och tredjeparts dateutil-moduler för att konvertera datetime-strängen till datetime-objekt. Låt oss börja med datetime-modulen

Använder datetime

Datetime är en inbyggd modul i Python som används för att arbeta med datum och tider. Det finns många klasser i den här modulen som hjälper oss att arbeta med datum och tid. Vi kommer att använda datetime.datetime-klassen för konverteringen.

Datetime.datetime har många metoder. Vi är intresserade av strptime-metoden som kommer att hjälpa oss i konverteringen. Låt oss kolla det.

datetime.strptime

Metoden datetime.strptime används för att konvertera datetime-strängen till ett datetime-objekt. Det krävs två strängar, en är datetime-sträng och den andra är formatet för den datetime-strängen. Och det returnerar datetime-objektet.

Låt oss se ett exempel

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

Om du kör ovanstående kod kommer du att se följande utdata.

2022-12-19 21:37:56

Vi har tagit en datetime-sträng och konverterat den till datetime-objekt med metoden datetime.strptime. Se till att formatet som du tillhandahåller metoden exakt matchar datetime-strängen. Om de inte matchade, kan du få ett fel eller felaktig utdata.

Vi har använt några formateringskoder för datetime-formatet. Du kan referera till alla formatkoder i dokumenten.

Metoden datetime.strptime returnerar fullständig datetime. Om du vill få datum och tid separat kan vi använda datetime-objektets datetime-metoder. Låt oss 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 koden ovan och du kommer att se följande utdata.

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

Metodernas datum och tid kommer att returnera sina respektive objekt. De kommer återigen att ha sina respektive metoder för datum och tider.

Vi har tillhandahållit de korrekta strängarna och formaten för metoden datetime.strptime som vi har sett ovan. Om vi ​​inte angav dem korrekt kommer vi att få fel. Låt oss se hur vi hanterar dessa fel. Kör följande kod.

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

Ovanstående kod kommer att ge ett fel eftersom formateringen inte matchar datetime-strängen. För att hantera den här typen av fel kan vi använda Pythons try-except. Låt oss lägga till 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 kommer att se följande felmeddelande utan att bryta koden.

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

På samma sätt kan vi lägga till try-except för den kommande parser.parse-metoden också. Det hjälper oss att undvika att bryta koden i mitten. Det här är inte speciellt relaterat till det här handledningssammanhanget, men det kommer att påminna dig om att använda det i din kod.

Det var allt för datetime-modulen. Låt oss gå till nästa moduldatum.

Använder dateutil

Modulen dateutil tillhandahåller tillägg till datetime-modulen. Det gör arbetet med datum och tider mycket enklare med många metoder med enkel användning. Låt oss installera modulen med följande kommando.

pip install python-dateutil

Metoden som vi är intresserade av är dateutil.parser.parse. Låt oss se hur man konverterar datetime-strängen till datetime-objekt.

parser.parse

Metoden parser.parse tar en datetime-sträng och konverterar den till ett respektive datetime-objektformat. Vi behöver inte tillhandahålla någon formatering för den här metoden. Den konverterar automatiskt den givna datetime-strängen till datetime-objekt. Låt oss se ett exempel.

from dateutil import parser

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

Om du kör ovanstående kod kommer du att se följande utdata.

2022-12-19 21:37:56

Datetime-strängen måste vara i ett speciellt format som parser.parse-metoden accepterar. Det kommer att ge ett fel om datetime-strängformatet inte är enligt önskat format. Du kan kontrollera alla datetime-strängformat som den accepterar för automatiska konverteringar.

Eftersom parser.parse-metoden returnerar datetime-objektet kan vi komma åt datetime-objekten separat som vi har sett med datetime-modulen. Låt oss 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 utdata nedan om du kör ovanstående kod.

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

Som du kan se gör dateutil det lättare att arbeta med datum och tider i jämförelse. Du kan utforska modulen i dokumenten.

Slutsats

Vi har använt en inbyggd modul och en tredjepartsmodul för att konvertera datetime-strängen till ett DateTime-objekt. Det finns en annan inbyggd modul som heter tid med vilken vi kan konvertera datetime-strängen till ett DateTime-objekt som liknar datetime- och dateutil-modulerna. Prova själv. Det kommer inte att vara svårt eftersom du redan har gjort en liknande sak med andra moduler.

Det kan finnas fler bibliotek med vilka vi kan uppnå samma sak. Modulerna som vi har använt i sakhandledning är standard och används ofta. Du kan utforska mer om andra moduler och välja den som passar dig bäst.

Du kan också utforska hur man beräknar tidsskillnaden i python.

Glad kodning 🙂