Come convertire stringhe in datetime in Python

La conversione da un tipo di dati a un altro tipo di dati è fondamentale in qualsiasi linguaggio di programmazione. Quasi tutti i linguaggi di programmazione supportano le conversioni di tipo per i tipi di dati incorporati.

I tipi di dati personalizzati come datetime richiedono moduli aggiuntivi per le conversioni. Abbiamo bisogno di moduli, specialmente per le conversioni di data e ora poiché lavorarci non è mai stato facile per i programmatori. Fortunatamente, Python ha moduli integrati per lavorare con datetime.

Impareremo come convertire una stringa datetime in un oggetto datetime in Python utilizzando diversi moduli. Prima di entrare in questo, vediamo perché dobbiamo convertirlo in primo luogo.

Perché dobbiamo convertire una stringa datetime in un oggetto datetime?

Quando dobbiamo lavorare con le date, non è facile lavorare se sono nel formato stringa. Convertirli in formato datetime rende molto semplice lavorare con loro. Le date nelle stringhe sono come stringhe normali. Non avrà metodi speciali per lavorare con le date. Avrà metodi di stringa generali, di cui non avremo bisogno mentre lavoriamo con le date.

Diciamo che dobbiamo confrontare due date. Se sono in formato stringa, possiamo confrontarli correttamente. Se sono in formato datetime, possiamo usare gli operatori di confronto come i numeri.

Questo è solo uno scenario in cui la conversione in formato datetime semplifica le cose. Esistono molti scenari come l’aggiunta di date, la sottrazione, la gestione dei fusi orari, ecc., In cui la conversione della stringa datetime in oggetto datetime rende la nostra vita più semplice che mai.

Detto questo, vediamo diversi modi per convertire una stringa datetime in un oggetto datetime. Useremo datetime integrato e moduli dateutil di terze parti per convertire la stringa datetime in oggetto datetime. Iniziamo con il modulo datetime

Usando data e ora

Il datetime è un modulo integrato di Python che viene utilizzato per lavorare con date e orari. Ci sono molte lezioni in questo modulo che ci aiutano a lavorare con date e orari. Useremo la classe datetime.datetime per la conversione.

Il datetime.datetime ha molti metodi. Siamo interessati al metodo strptime che ci aiuterà nella conversione. Controlliamo.

datetime.strptime

Il metodo datetime.strptime viene utilizzato per convertire la stringa datetime in un oggetto datetime. Prende due stringhe, una è la stringa datetime e l’altra è il formato di quella stringa datetime. E restituisce l’oggetto datetime.

Vediamo un esempio

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

Se esegui il codice precedente, vedrai il seguente output.

2022-12-19 21:37:56

Abbiamo preso una stringa datetime e l’abbiamo convertita in un oggetto datetime usando il metodo datetime.strptime. Assicurati che il formato che stai fornendo al metodo corrisponda esattamente alla stringa datetime. Se non corrispondono, potresti ricevere un errore o un output errato.

Abbiamo utilizzato alcuni codici di formattazione per il formato datetime. Puoi fare riferimento a tutti i codici di formato nei documenti.

Il metodo datetime.strptime restituisce datetime complete. Se vuoi ottenere la data e l’ora separatamente, possiamo usare i metodi data e ora dell’oggetto datetime. Vediamo il codice.

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

Esegui il codice precedente e vedrai il seguente output.

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

I metodi data e ora restituiranno rispettivamente i loro oggetti. Avranno di nuovo i rispettivi metodi per date e orari.

Abbiamo fornito le stringhe e i formati corretti per il metodo datetime.strptime che abbiamo visto sopra. Se non li abbiamo forniti correttamente, otterremo errori. Vediamo come gestire questi errori. Eseguire il codice seguente.

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

Il codice precedente genererà un errore perché la formattazione non corrisponde alla stringa datetime. Per gestire questo tipo di errori, possiamo usare try-except di Python. Aggiungiamolo.

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)

Ora, esegui di nuovo il codice. Verrà visualizzato il seguente messaggio di errore senza violare il codice.

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

Allo stesso modo, possiamo aggiungere anche try-except per il prossimo metodo parser.parse. Ci aiuta a evitare di rompere il codice nel mezzo. Questo non è particolarmente correlato a questo contesto tutorial, ma ti ricorderà di usarlo nel tuo codice.

Questo è tutto per il modulo datetime. Passiamo al modulo successivo dateutil.

Usando dateutil

Il modulo dateutil fornisce estensioni al modulo datetime. Rende il lavoro con date e orari molto più semplice con molti metodi di facile utilizzo. Installiamo il modulo con il seguente comando.

pip install python-dateutil

Il metodo che ci interessa è dateutil.parser.parse. Vediamo come convertire la stringa datetime in oggetto datetime.

parser.parse

Il metodo parser.parse prenderà una stringa datetime e la converte in un rispettivo formato oggetto datetime. Non è necessario fornire alcuna formattazione per questo metodo. Converte automaticamente la data stringa datetime in oggetto datetime. Vediamo un esempio.

from dateutil import parser

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

Se esegui il codice precedente, vedrai il seguente output.

2022-12-19 21:37:56

La stringa datetime deve essere in un formato particolare accettato dal metodo parser.parse. Genererà un errore se il formato della stringa datetime non è conforme al formato desiderato. Puoi controllare tutti i formati di stringhe datetime accettati per le conversioni automatiche.

Poiché il metodo parser.parse restituisce l’oggetto datetime, possiamo accedere agli oggetti data e ora separatamente come abbiamo visto con il modulo datetime. Vediamo il codice.

from dateutil import parser

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

Puoi vedere l’output di seguito se esegui il codice sopra.

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

Come puoi vedere, dateutil semplifica il lavoro comparativo con le date e gli orari. Puoi esplorare il modulo nei documenti.

Conclusione

Abbiamo utilizzato un modulo integrato e un modulo di terze parti per convertire la stringa datetime in un oggetto DateTime. C’è un altro modulo integrato chiamato time con il quale possiamo convertire la stringa datetime in un oggetto DateTime simile ai moduli datetime e dateutil. Prova tu stesso. Non sarà difficile perché hai già fatto una cosa simile con altri moduli.

Potrebbero esserci più librerie con le quali possiamo ottenere la stessa cosa. I moduli che abbiamo utilizzato in cosa tutorial sono standard e ampiamente utilizzati. Puoi esplorare di più su altri moduli e scegliere quello più adatto a te.

Puoi anche esplorare come calcolare la differenza di tempo in Python.

Buona programmazione 🙂