Vai al contenuto principale

Stringa Python in DateTime: come convertire stringhe in oggetti DateTime

Impara a convertire stringhe in oggetti datetime in Python usando strptime(), dateutil e pandas con esempi di codice pratici.
Aggiornato 3 giu 2026  · 8 min leggi

In Python, le stringhe sono un tipo di dato comune usato per rappresentare date e orari, ma come data scientist e ingegneri spesso dobbiamo convertirle in oggetti datetime per eseguire varie operazioni, come l’ordinamento o il confronto.

Convertire stringhe in oggetti datetime può essere complicato, soprattutto per chi è alle prime armi con Python. In questo articolo ti guiderò passo dopo passo nell’uso di questi metodi e fornirò esempi di codice lungo il percorso. Che tu sia uno sviluppatore esperto o stia iniziando ora, tuffiamoci nel mondo degli oggetti datetime in Python!

Per eseguire facilmente in autonomia tutto il codice di esempio di questo tutorial, puoi creare gratuitamente un workbook DataLab con Python preinstallato che contiene tutti gli snippet. Per fare più pratica sulla conversione delle stringhe in oggetti datetime, dai un’occhiata a questo esercizio pratico su DataCamp.

TL;DR

Usa datetime.strptime(date_string, format) per convertire stringhe in oggetti datetime in Python. Per un parsing flessibile senza stringhe di formato, usa dateutil.parser.parse(). Per i DataFrame, pd.to_datetime() gestisce intere colonne in modo efficiente. Codici di formato chiave: %Y (anno a 4 cifre), %m (mese), %d (giorno), %H (ora), %M (minuto), %S (secondo).

Introduzione al modulo datetime di Python

Il modulo datetime, fornito di serie con Python, può essere usato ogni volta che devi lavorare con date, orari o intervalli temporali in qualsiasi applicazione sviluppata in Python. Fornisce classi e metodi comodi per rappresentare e manipolare dati di data e ora.

Tabella 1: Panoramica di classi e metodi nel modulo datetime

Classe/Metodo Scopo Casi d'uso comuni
datetime.date Rappresenta una data (anno, mese, giorno). Calcolare differenze tra date, formattare date come stringhe, estrarre componenti della data.
datetime.time Rappresenta un orario del giorno (ora, minuto, secondo, microsecondo). Confrontare orari, formattare orari come stringhe, estrarre componenti dell'orario.
datetime.datetime Rappresenta una data e un orario. Combina le funzionalità di date e time. Lavorare con dati di serie temporali, estrarre componenti di data e ora, formattare come stringhe.
datetime.timedelta Rappresenta la differenza tra due date o orari (durata). Aggiungere/sottrarre durate a/da date o orari, calcolare intervalli temporali.
datetime.strptime() Analizza una stringa in un oggetto datetime in base a un formato specificato. Convertire stringhe in oggetti datetime per ulteriori manipolazioni e analisi.
datetime.strftime() Formatta un oggetto datetime in una stringa in base a un formato specificato. Convertire oggetti datetime in stringhe leggibili per visualizzazione o report.

Vediamo di capire le principali classi di questo modulo, dato che le convertirai negli oggetti datetime:

1. datetime.date

Questa classe rappresenta una data (anno, mese e giorno) e fornisce metodi per lavorare con le date, come calcolare la differenza tra due date e formattare le date come stringhe.

Supponiamo di avere un dataset con i prezzi giornalieri di un’azione. Possiamo usare la classe date per estrarre le date dal dataset e tracciare l’andamento dei prezzi nel tempo.

Ecco un frammento che mostra l’uso della classe date:

from datetime import date

# create a date object representing March 1, 2023
start_date = date(2023, 3, 1)

# extract information such as the year, month, and day
year = start_date.year
month = start_date.month
day = start_date.day

# get the day of the week (Note: Monday is coded as 0, and Sunday as 6)
weekday = start_date.weekday()

# the date can be formatted as a string if needed
date_str = start_date.strftime('%Y-%m-%d')

2. datetime.time

Questa classe rappresenta un orario del giorno (ora, minuto, secondo e microsecondo) e fornisce metodi per lavorare con gli orari, come confrontarli e formattarli come stringhe.

Mettiamo il caso di avere un dataset con l’orario di arrivo di una gara; possiamo usare la classe time per estrarre ore e minuti di ogni concorrente al traguardo.

from datetime import time

# create a time object with the microsecond granularity
end_time = time(15, 45, 30, 500000)

# get the hour and minute
hour = end_time.hour
minute = end_time.minute
second = end_time.second
microsecond = end_time.microsecond

3. datetime.datetime

Questa classe rappresenta una data e un orario e fornisce metodi per lavorare con entrambi. Combina la funzionalità delle classi date e time.

È comunemente usata nelle attività di analisi dati che coinvolgono serie temporali con alta risoluzione temporale, come dati orari o al minuto. Supponi di avere un dataset con la domanda oraria di elettricità per una città. Possiamo usare la classe datetime per estrarre data e ora dal dataset e tracciare la domanda nel tempo. Per visualizzare questo tipo di dati, vedi il nostro tutorial Grafico a linee di serie temporali con Matplotlib.

from datetime import datetime

# create a datetime object representing March 1, 2023 at 9:30 AM
start_datetime = datetime(2023, 3, 1, 9, 30)

# get the year, month, day, hour, and minute
year = start_datetime.year
month = start_datetime.month
day = start_datetime.day
hour = start_datetime.hour
minute = start_datetime.minute

4. datetime.timedelta

Questa classe rappresenta una durata o un intervallo di tempo e fornisce metodi per lavorare con gli intervalli, come aggiungerli o sottrarli da date o orari.

Supponiamo di avere un dataset con orari di inizio e fine di una serie di eventi e di voler calcolare la durata totale di tutti gli eventi. Possiamo usare la classe timedelta per calcolare la durata di ciascun evento e sommarle.

from datetime import timedelta

# create a timedelta object representing 3 hours and 15 minutes
event_duration = timedelta(hours=3, minutes=15)

# get the total duration in seconds
event_duration_seconds = event_duration.total_seconds()

# add the duration to a start time to get an end time
event_start_time = datetime(2023, 3, 1, 18, 15)
event_end_time = event_start_time + event_duration

In tutti i casi mostrati abbiamo usato oggetti datetime, ma nei dati reali spesso le informazioni restano come stringhe. Convertirle in oggetti datetime sblocca tutte le funzionalità sopra descritte, molto potenti per analisi e applicazioni di data science.

Uso di datetime.strptime() per la conversione

In Python, possiamo usare il metodo datetime.strptime() per convertire una stringa in un oggetto datetime. strptime() accetta due argomenti: la stringa da convertire e una stringa di formato che specifica il formato della stringa di input.

La stringa di formato usa una combinazione di codici di formattazione per rappresentare le varie componenti di data e ora. Ecco alcuni dei codici più usati (concetti simili valgono anche per la formattazione delle stringhe in Python):

Tabella 2: Codici di formattazione datetime comuni

Codice di formato Descrizione Esempio input Esempio output
%Y Anno a 4 cifre 2023 2023
%y Anno a 2 cifre 23 23
%m Mese a 2 cifre (01-12) 03 03
%d Giorno del mese a 2 cifre (01-31) 15 15
%H Ora a 2 cifre (00-23) 14 14
%I Ora a 2 cifre (01-12) 02 02
%M Minuto a 2 cifre (00-59) 45 45
%S Secondo a 2 cifre (00-59) 30 30
%f Microsecondo (000000-999999) 123456 123456
%p AM o PM PM PM
%z Offset UTC +0530 +0530
%a Nome abbreviato del giorno della settimana Tue Tue
%A Nome completo del giorno della settimana Tuesday Tuesday
%b Nome abbreviato del mese Mar Mar
%B Nome completo del mese March March
%j Giorno dell'anno (001-366) 074 074
%U Numero della settimana dell'anno (domenica come primo giorno) 10 10
%W Numero della settimana dell'anno (lunedì come primo giorno) 09 09

Ora che abbiamo capito le direttive di strptime, il processo di conversione da stringhe a oggetti datetime si semplifica.

  • Passo 01: Analizza la stringa data-ora per individuare pattern che corrispondono ai codici di formattazione.
  • Passo 02: Crea il formato data-ora usando le direttive di strptime().
  • Passo 03: Passa stringa e formato alla funzione e ottieni l’oggetto in output.

Mettiamo in pratica questi passaggi.

Conversione di una stringa in un formato specifico in un oggetto datetime

from datetime import datetime

# Example with the standard date and time format
date_str = '2023-02-28 14:30:00'
date_format = '%Y-%m-%d %H:%M:%S'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

# Example with a different format

date_str = '02/28/2023 02:30 PM'
date_format = '%m/%d/%Y %I:%M %p'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

Nel primo esempio abbiamo una stringa che rappresenta una data e un’ora nel formato ‘YYYY-MM-DD HH:MM:SS’, e nel secondo esempio in un formato diverso, ‘MM/DD/YYYY HH:MM AM/PM’.

In entrambi i casi, specifichiamo la stringa di formato corretta come secondo argomento di strptime() per ottenere l’oggetto datetime corretto.

Conversione di una stringa con informazioni sul fuso orario in un oggetto datetime

from datetime import datetime

date_str = '2023-02-28 14:30:00+05:30'
date_format = '%Y-%m-%d %H:%M:%S%z'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

In questo esempio abbiamo una stringa che rappresenta una data e un’ora con informazioni sul fuso orario nel formato ‘YYYY-MM-DD HH:MM:SS+TZOFFSET’, dove TZOFFSET è lo scostamento del fuso orario in ore e minuti rispetto all’UTC. Specifichiamo la stringa di formato come secondo argomento di strptime(), includendo il codice di formattazione %z per analizzare l’offset del fuso orario.

Sebbene la funzione vista sopra possa sembrare semplice in teoria, nella pratica può anche essere fonte di frustrazione quando qualcosa va storto.

Parsing di date senza stringhe di formato con dateutil

Un’altra opzione flessibile è la libreria dateutil, in particolare la funzione parser.parse(). Rileva automaticamente i formati di data, permettendoti di analizzare stringhe senza specificare una stringa di formato.

from dateutil.parser import parse

# Automatically infers the format
date_obj = parse("March 1, 2023 9:30 AM")
print(date_obj)

Questo è particolarmente utile quando si lavora con formati di data imprevedibili o incoerenti.

Gestione dei fusi orari

Per la gestione di datetime con fuso orario, Python offre due opzioni popolari:

  • pytz (ampiamente usata e compatibile con versioni precedenti)

  • zoneinfo (introdotta in Python 3.9, parte della libreria standard)

from datetime import datetime
from zoneinfo import ZoneInfo

# Using zoneinfo
dt = datetime(2023, 3, 1, 9, 30, tzinfo=ZoneInfo("America/New_York"))
print(dt)

# Using pytz (alternative)
import pytz
tz = pytz.timezone("America/New_York")
dt_pytz = tz.localize(datetime(2023, 3, 1, 9, 30))
print(dt_pytz)

Questi strumenti ti permettono di assegnare fusi orari, convertirli tra loro e gestire automaticamente l’ora legale.

Considerazioni sull’ora legale

Quando lavori con datetime con fuso orario, l’ora legale (DST) può creare complicazioni, soprattutto quando gli orologi vengono spostati avanti o indietro.

Librerie come zoneinfo e pytz gestiscono automaticamente le transizioni dell’ora legale quando assegni il fuso orario appropriato:

from datetime import datetime
from zoneinfo import ZoneInfo

# Before and after DST starts
before_dst = datetime(2023, 3, 12, 1, 30, tzinfo=ZoneInfo("America/New_York"))
after_dst = datetime(2023, 3, 12, 3, 30, tzinfo=ZoneInfo("America/New_York"))

print(before_dst)
print(after_dst)

Questo assicura che i calcoli su datetime restino accurati attraverso i cambi dell’ora legale.

Uso di pandas per la conversione

Sebbene il modulo datetime integrato in Python sia potente, molti data scientist preferiscono usare la libreria pandas per le conversioni di datetime grazie alla sua semplicità e alla capacità di gestire in modo efficiente intere colonne di date usando i DataFrame.

import pandas as pd

# Converting a column of strings to datetime objects
date_series = pd.to_datetime(['2023-02-28', '2023-03-01', '2023-03-02'])
print(date_series)

Pandas rileva automaticamente i formati e gestisce bene le incoerenze più comuni, diventando la scelta ideale quando si lavora con dati tabellari. Scopri di più nella nostra guida Data Preparation with pandas.

Formattare oggetti datetime in stringhe con strftime()

Una volta che hai convertito le stringhe in oggetti datetime ed eseguito le operazioni desiderate, potresti doverli riconvertire in stringhe. Per farlo puoi usare datetime.strftime().

from datetime import datetime

now = datetime.now()
formatted = now.strftime('%Y-%m-%d %H:%M:%S')
print(formatted)

Questo metodo ti dà il pieno controllo su come visualizzare l’oggetto datetime in forma di stringa.

Risoluzione dei problemi comuni con strptime()

Ecco alcuni errori comuni che potresti incontrare e come risolverli. Per approfondire la gestione delle eccezioni in Python, consulta il nostro tutorial dedicato:

ValueError: time data 'date_string' does not match format '%Y-%m-%d %H:%M:%S'

Il problema più comune si verifica quando la stringa di input non corrisponde alla stringa di formato. Verifica che stringa di input e stringa di formato corrispondano esattamente.

import datetime

# When using 4-digit year format but input has 2-digit year
date_str = '23-03-01'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')  # Wrong: %Y expects 4 digits
# Raises ValueError: time data '23-03-01' does not match format '%Y-%m-%d'

# When format doesn't match separator in string
time_str = '08:30:00'
time_obj = datetime.datetime.strptime(time_str, '%H-%M-%S')  # Wrong: using - instead of :
# Raises ValueError: time data '08:30:00' does not match format '%H-%M-%S'

TypeError: strptime() argument 1 must be str, not 'int'

Il secondo errore comune si verifica quando passi un intero a datetime.strptime() o time.strptime() invece di una stringa. Assicurati che tutti i valori passati alla funzione siano stringhe.

# Example 1: Integer instead of string
date_int = 20230301
date_obj = datetime.datetime.strptime(date_int, '%Y%m%d')
# Raises TypeError: strptime() argument 1 must be str, not int

# Example 2: List instead of string
date_list = [2023, 3, 1]
date_obj = datetime.datetime.strptime(date_list, '%Y-%m-%d')
# Raises TypeError: strptime() argument 1 must be str, not list

ValueError: unconverted data remains: ':00'

Questo errore si verifica quando nella stringa di input rimangono caratteri non coperti dalla stringa di formato. Ad esempio, l’errore si presenta se la stringa di formato specifica solo anno, mese e giorno, ma la stringa di input contiene anche l’orario. Per risolvere, assicurati che la stringa di formato corrisponda all’intera stringa di input.

# when input string contains time of day
date_str = '2023-03-01 12:30:00'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains:  12:30:00

# When input string contains extra characters
date_str = '2023-03-01T00:00:00Z'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains: T00:00:00Z

Conclusione

Possiamo dire con certezza che il metodo datetime.strptime() offre un modo flessibile e potente per convertire stringhe in oggetti datetime in Python e può essere usato per gestire un’ampia gamma di formati di data e ora. Perché non scarichi il nostro cheat sheet su date e orari per consultarlo in seguito?

Dopo aver capito come funzionano date e orari, il passo successivo è metterli in pratica in un progetto. Ti consigliamo di sceglierne uno tra questi per consolidare l’apprendimento:

Siamo d’accordo che i dati di data e ora nel mondo reale siano complicati, ma tutto ciò di cui hai bisogno è comprendere i formati e i pattern dietro ogni tipo di data e ora presenti nei tuoi dati e usare con criterio le librerie a disposizione.

FAQ

Come posso gestire stringhe con formati di data misti nello stesso dataset?

Quando lavori con dataset che includono formati di data misti, puoi usare il modulo dateutil di Python. La funzione dateutil.parser.parse() è più flessibile di datetime.strptime() perché può rilevare e analizzare automaticamente una varietà di formati di data senza richiedere una stringa di formato predefinita:

from dateutil.parser import parse

date_str1 = '2023-03-01'
date_str2 = 'March 1, 2023'

date_obj1 = parse(date_str1)
date_obj2 = parse(date_str2)

print(date_obj1)  # Output: 2023-03-01 00:00:00
print(date_obj2)  # Output: 2023-03-01 00:00:00

Posso convertire stringhe in oggetti datetime tenendo conto di fusi orari diversi?

Sì, puoi gestire i fusi orari usando la libreria pytz in combinazione con datetime. Prima converti la stringa in un oggetto datetime, poi assegna un fuso orario usando pytz.timezone():

from datetime import datetime
import pytz

date_str = '2023-03-01 14:30:00'
date_format = '%Y-%m-%d %H:%M:%S'
date_obj = datetime.strptime(date_str, date_format)

# Set time zone
timezone = pytz.timezone('US/Eastern')
date_obj_tz = timezone.localize(date_obj)

print(date_obj_tz)  # Output: 2023-03-01 14:30:00-05:00

Qual è la differenza tra datetime.strptime() e datetime.fromisoformat()?

datetime.strptime() ti permette di specificare una stringa di formato personalizzata per analizzare formati di data non standard o variabili.

datetime.fromisoformat() è progettata specificamente per analizzare stringhe di data formattate secondo ISO 8601 (ad es., '2023-03-01T14:30:00'). È più semplice da usare se le tue stringhe seguono rigorosamente lo standard ISO 8601:

from datetime import datetime

iso_date_str = '2023-03-01T14:30:00'
date_obj = datetime.fromisoformat(iso_date_str)
print(date_obj)  # Output: 2023-03-01 14:30:00

Come converto un oggetto datetime di nuovo in una stringa in Python?

Usa il metodo strftime() per convertire un oggetto datetime di nuovo in una stringa. Passa una stringa di formato che specifichi come vuoi l’output:

from datetime import datetime

dt = datetime(2023, 3, 1, 14, 30)
date_string = dt.strftime('%Y-%m-%d %H:%M:%S')
print(date_string)  # Output: 2023-03-01 14:30:00

I codici di formato sono gli stessi usati con strptime(), rendendo semplice il round-trip tra stringhe e oggetti datetime.

Qual è la differenza tra strptime() e strftime() in Python?

strptime() e strftime() sono operazioni opposte:

  • strptime() ("string parse time") converte una stringa in un oggetto datetime. Accetta una stringa e un formato come argomenti.
  • strftime() ("string format time") converte un oggetto datetime in una stringa. Formattta il datetime secondo una stringa di formato specificata.

Un promemoria utile: strptime() analizza stringhe, mentre strftime() formatta in stringhe.


Arunn Thevapalan's photo
Author
Arunn Thevapalan
LinkedIn
Twitter

Come senior data scientist, progetto, sviluppo e distribuisco soluzioni di machine learning su larga scala per aiutare le aziende a prendere decisioni migliori basate sui dati. Come autore nell'ambito della data science, condivido ciò che ho imparato, consigli di carriera e tutorial pratici approfonditi.

Argomenti

Scopri di più su Python

Corso

Elaborazione di serie temporali in Python

4 h
71.5K
In questo corso imparerai le basi per lavorare con i dati delle serie temporali.
Vedi dettagliRight Arrow
Inizia il corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra altroMostra altro