Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Gestire date e orari con Python

Impariamo a gestire, stampare, elaborare e confrontare date e orari con il linguaggio di programmazione Python
Impariamo a gestire, stampare, elaborare e confrontare date e orari con il linguaggio di programmazione Python
Link copiato negli appunti

Python consente di gestire date e orari tramite il modulo datetime che è compreso di default nel package d'installazione del linguaggio di programmazione. Non è quindi necessario installarlo separatamente tramite pip. Esso offre diverse modalità per stampare, elaborare e confrontare informazioni relative al tempo. Analizziamo quindi i metodi del modulo che potrebbero esserci più utili durante il nostro lavoro.

Stampare l'orario corrente con Python

In Python date e orari non sono dei tipi di dati specifici ma possono essere gestiti come degli oggetti. Un modo per stampare l'orario corrente è per esempio quello di utilizzare il metodo now() del modulo datetime che consente di creare un oggetto contenente data e ora per poi formattare e restituire a video soltanto la parte di informazione che ci interessa. Escludendo quindi dall'output giorno mese e anno.

Come impostazione predefinita now() restituisce la data corrente e l'orario sincronizzato al meridiano di Greenwich, questo significa che di base non si hanno discrepanze tra l'orario corrente italiano e quello stampato a video. Lanciando un semplice script come il seguente:

import datetime
obj = datetime.datetime.now()
print("Data e ora al meridiano di Greenwich:", obj)

Si ha quindi un output simile a quello mostrato nella prossima immagine:

L'informazione riguardante la data viene invece restituita nel formato inglese americano "anno, mese e giorno". Per ottenere soltanto l'informazione riguardante l'orario possiamo però agire in questo modo:

from datetime import datetime
# generiamo un oggetto
# che contiene data e ora corrente
obj = datetime.now()
# generiamo una stringa
# che rappresenta l'orario corrente
orarioCorrente = obj.strftime("%H:%M:%S")
print("Sono le:", orarioCorrente)

Una volta ottenuto l'oggetto prodotto dalla chiamata al metodo now(), esso è stato passato al metodo strftime() che restituisce una stringa che rappresenta data e orario. Considerando che noi desideriamo visualizzare soltanto l'orario, dalla stringa sono stati estratti:

  • %H: l'ora espressa in formato da 24 ore, quindi dalle "00" alle "23";
  • %M: i minuti nell'intervallo da "00" a "59";
  • %S: i secondi nell'intervallo da "00" a "59".

Come anticipato, datetime consente di manipolare i dati temporali in modi differenti. Nel codice che segue, ad esempio, l'estrazione e la stampa delle singole informazioni relative a ora, minuto e secondo dell'orario corrente avviene tramite un chiamata agli attributi del metodo now().

from datetime import datetime
# Estrazione dell'orario corrente
obj = datetime.now()
# Restituzione a video di ora, minuto e secondo
print("Ora:", obj.hour)
print("Minuto:", obj.minute)
print("Secondo:", obj.second)

A ciascun attributo corrisponde una componente dell'oggetto generato dalla chiamata al metodo, quindi abbiamo hour per l'ora, minute per il minuto e second per il secondo. Nello stesso modo il metodo supporta gli attributi year, month e day per le informazioni relative ad anno, mese e giorno. È disponibile persino l'attributo microsecond per il milionesimo di secondo.

Un'alternativa a datetime è il modulo time. Quest'ultimo offre alcuni vantaggi dal punto di vista della gestione delle timezone ma dispone di un supporto più limitato alla programmazione orientata agli oggetti. Per una semplice operazione come la stampa dell'orario corrente la sua sintassi è comunque molto simile a quella di datetime:

import time
obj = time.strftime("%H:%M:%S", time.localtime())
print("Sono le:", obj)

La formattazione dell'orario avviene nello stesso modo. Si noti però l'uso del metodo localtime() del modulo time che impone all'interprete di restituire l'informazione corrispondente all'orario locale.

Stampare la data corrente con Python

Il modulo datetime ci consente anche di stampare la sola data corrente, senza riferimenti all'orario, utilizzando anche in questo caso il metodo now(). Un semplice esempio di restituzione a video di tale dato potrebbe essere il seguente:

from datetime import datetime
# Estrazione della data corrente
obj = datetime.now()
# Formattazione della data nel formato "giorno-mese-anno"
data_corrente = obj.strftime("%d-%m-%Y")
# Stampa a video della data
print("Oggi è il:", data_corrente)

Osservando il codice proposto non si osservano particolari novità rispetto a quanto fatto per la stampa a video dell'orario corrente. Vale comunque la pena di notare come in questo caso la formattazione tramite il metodo strftime() avvenga utilizzando gli elementi elencati di seguito:

  • %d: rappresenta il giorno in formato numerico da 01 a 31;
  • %m: rappresenta il mese in formato numerico da 01 a 12;
  • %Y: rappresenta l'anno espresso per intero (ad esempio: "2023").

È naturalmente possibile riproporre il medesimo esempio facendo ricorso agli attributi per la restituzione della data, in questo modo:

from datetime import datetime
# Estrazione della data corrente
obj = datetime.now()
# Estrazione di giorno, mese e anno dall'oggetto
giorno = obj.day
mese = obj.month
anno = obj.year
# Formattazione e stampa della data nel formato "giorno-mese-anno"
print(f"{giorno}-{mese}-{anno}")

L'output generato dall'esecuzione da questo script è praticamente identico a quello del precedente:

Un altro modo per estrarre ogni elemento che compone una data è quello di utilizzare il metodo today() dell'oggetto date di datetime:

from datetime import date
# Generazione dell'oggetto contenente la data corrente
obj = date.today() 
# Stampa delle componenti della data corrente
print("Anno corrente:", obj.year)
print("Mese corrente:", obj.month)
print("Giorno corrente:", obj.day)

today() ha il compito di creare l'oggetto relativo alla data odierna, una volta ottenuto quest'ultimo basta utilizzare i metodi "year", "month" e "day" per la restituzione di ogni singolo elemento di tale informazione.

Confrontare date con Python

Un caso interessante di elaborazione dei dati temporali in Python riguarda il confronto tra date. Ad esempio, se desiderassimo calcolare il numero di ore trascorse tra due date, potremmo utilizzare la classe datetime.timedelta di datetime che permette appunto di calcolare la differenza tra i valori di due oggetti ottenuti da altrettante date. A questo proposito lo script seguente consente di stampare a video il numero di ore trascorse tra il 22 febbraio 1974 e il 22 febbraio 2023:

from datetime import datetime, timedelta
# Generazione degli oggetti datetime per le date a confronto
data_inizio = datetime(1974, 2, 22)
data_fine = datetime(2023, 2, 22)
# Calcolo della differenza tra le due date in ore
differenza = data_inizio - data_fine
risultato = differenza.total_seconds() / 3600
# Stampa del risultato
print("Tra il 22-02-1974 e il 22-02-2023 sono passate", risultato, "ore.")

total_seconds() non accetta alcun tipo di parametro e restituisce il numero totale di secondi passati durante il trascorrere di un determinato intervallo di tempo. il valore così ottenuto può essere facilmente utilizzato per calcolare differenze espresse in giorni, mesi, anni o in altre unità di tempo.

Conclusioni

Il linguaggio Python offre diversi costrutti per la gestione delle date. Nel corso di questa breve guida sono stati presentati principalmente esempi basati sul modulo datetime ma quest'ultimo è soltanto di una delle soluzioni disponibili per tale scopo.

Ti consigliamo anche