Vai al contenuto
eLearner.app
Modulo 8 · Lezione 2 di 430/36 nel corso~12 min
Lezioni del modulo (2/4)

datetime: date e orari

Il modulo datetime fornisce le classi per rappresentare date e orari.

Le tre classi principali

  • date — solo data (anno, mese, giorno)
  • time — solo orario (ora, minuto, secondo, microsecondo)
  • datetime — data + orario insieme
  • timedelta — una durata (differenza tra due istanti)
Python
from datetime import date, time, datetime, timedelta

date(2025, 1, 1)                  # datetime.date(2025, 1, 1)
time(14, 30, 0)                   # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0)   # datetime.datetime(2025, 1, 1, 14, 30)

"Adesso": now e today

Python
datetime.now()        # data + ora correnti
date.today()          # solo data corrente

Aritmetica con timedelta

Python
from datetime import datetime, timedelta

ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)

# differenza fra due datetime → timedelta
delta = domani - ora
delta.days        # 1
delta.total_seconds()   # 86400.0

timedelta accetta days, seconds, microseconds, milliseconds, minutes, hours, weeks (NON months o years, ambigui).

Formatting: strftime

Trasforma datetime → stringa secondo un pattern.

Python
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d")         # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M")   # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y")      # 'Wednesday 01 January 2025' (dipende dal locale)

Direttive più usate: %Y anno 4cifre, %m mese 2cifre, %d giorno 2cifre, %H ora 24h, %M minuti, %S secondi.

Parsing: strptime

L'opposto: stringa → datetime, indicando il pattern atteso.

Python
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)

ISO 8601

Per scambio di dati preferisci sempre il formato ISO 8601 (YYYY-MM-DDTHH:MM:SS):

Python
ora.isoformat()                 # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")

Fusi orari e datetime aware

Per impostazione predefinita, gli oggetti datetime in Python sono naive (non contengono informazioni sul fuso orario). Per applicazioni reali, è raccomandato renderli aware impostando il fuso orario tramite timezone.utc del modulo datetime, o usando moduli esterni come zoneinfo.

Prova tu

Esercizio#python.m8.l2.e1
Tentativi: 0Caricamento…

Calcola la data di 30 giorni dopo il 1° gennaio 2025 e formattala come 'YYYY-MM-DD' nella variabile `date_str`. Valuta `date_str`.

Caricamento editor…
Mostra suggerimento

base + timedelta(days=30), poi .strftime

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#python.m8.l2.e2
Tentativi: 0Caricamento…

Data la stringa `s = '15/03/2025'`, parsala con strptime nella variabile `d` (oggetto datetime). Valuta il giorno della settimana intero `d.weekday()` (0=lun, 6=dom).

Caricamento editor…
Mostra suggerimento

strptime con il pattern del formato italiano.

Soluzione disponibile dopo 3 tentativi

Sfida aggiuntiva

Esercizio#python.m8.l2.e3
Tentativi: 0Caricamento…

Importa `date` dal modulo `datetime`. Calcola la differenza in giorni tra il 25 dicembre 2026 (`date(2026, 12, 25)`) e il 20 dicembre 2026 (`date(2026, 12, 20)`). Salva i giorni della differenza (accedendo all'attributo `.days`) in `days_diff`. Valuta infine la variabile.

Caricamento editor…
Mostra suggerimento

La differenza tra due date restituisce un timedelta. Accedi ai giorni con delta.days.

Soluzione disponibile dopo 3 tentativi