Daylight Saving Time

Ora legale spiegata: come il DST influisce sui timestamp Unix

L'ora legale sposta avanti gli orologi locali in primavera e indietro in autunno. I timestamp Unix sono immuni (contano sempre UTC), ma ogni conversione tra tempo Unix e ora locale deve sapere se l'ora legale è attiva. Questa guida spiega cos'è il DST, dove si applica, i bug di buco e sovrapposizione che crea, e come gestirlo correttamente.

Il DST e il tempo Unix in un minuto

L'ora legale sposta gli orologi locali un'ora avanti in primavera e un'ora indietro in autunno. Un timestamp Unix non si muove mai — conta i secondi UTC e ticchetta dritto attraverso ogni transizione — quindi è immune al DST. Ciò che cambia è l'ora locale che visualizzi per esso. Due transizioni causano quasi tutti i bug di DST: il buco della primavera, in cui un'ora di tempo locale non accade mai, e la sovrapposizione dell'autunno, in cui un'ora accade due volte. La tabella sotto indica quando cambiano le principali regioni.

RegionePassaggio all'ora legaleRitorno all'ora solareCambio dell'orologio
USA e Canada2ª domenica di marzo1ª domenica di novembre02:00 → 03:00 locale
Unione EuropeaUltima domenica di marzoUltima domenica di ottobre01:00 UTC, +1 ora
Regno UnitoUltima domenica di marzoUltima domenica di ottobreGMT ↔ BST
Australia (stati che la applicano)1ª domenica di ottobre1ª domenica di aprileEmisfero sud — invertito

Cos'è l'ora legale?

L'ora legale (DST) è la pratica di spostare avanti gli orologi locali di un'ora durante parte dell'anno per prolungare la luce serale. Circa 70 paesi la applicano attualmente, perlopiù alle latitudini temperate. La transizione è una discontinuità nell'ora dell'orologio da parete, non in UTC — i timestamp Unix continuano a ticchettare senza scosse attraverso ogni passaggio e ritorno.

  • Emisfero nord: gli orologi di solito vanno avanti a marzo e indietro a ottobre/novembre
  • Emisfero sud: gli orologi vanno avanti a ottobre e indietro a marzo/aprile
  • Le regioni tropicali ed equatoriali generalmente non applicano il DST
  • Il DST aggiunge un'ora di luce alla sera ma non cambia la quantità totale di luce diurna

Come le transizioni di DST influiscono sui timestamp Unix

Un timestamp Unix è il numero di secondi trascorsi dal 1970 UTC, quindi non può saltare avanti né ripetersi. Ciò che cambia è l'interpretazione in ora locale di quei secondi. A un passaggio all'ora legale, l'orologio locale salta da 02:00 a 03:00 — l'ora da parete dalle 02:00 alle 02:59 non accade mai localmente. Al ritorno all'ora solare, l'orologio locale dalle 01:00 alle 01:59 accade due volte, con un'ora di scarto in UTC.

  • Nessun timestamp Unix viene mai saltato o duplicato dal DST
  • Un dato timestamp Unix corrisponde a un'ora locale precisa, offset incluso (PDT vs PST, BST vs GMT, ecc.)
  • Una data ora locale può corrispondere a zero (buco DST) o due (sovrapposizione DST) timestamp Unix
  • Usa i nomi IANA (America/Los_Angeles) così il DST viene applicato per te; non codificare mai a mano un offset come UTC−8 se il luogo applica il DST

Il buco e la sovrapposizione di DST spiegati

Le due transizioni creano i due bug classici del DST. Il buco della primavera è la fonte più comune di fallimenti di pianificazione e promemoria — un evento fissato alle 02:30 nel giorno della transizione non esisterà localmente. La sovrapposizione dell'autunno è la più sottile — un evento alle 01:30 nel giorno della transizione esiste due volte, a un'ora di distanza. Ogni caso richiede una politica esplicita.

TransizioneL'orologio faEffetto sull'ora locale
Passaggio all'ora legale02:00 → 03:0002:00–02:59 non esiste mai (il "buco")
Ritorno all'ora solare02:00 → 01:0001:00–01:59 si verifica due volte (la "sovrapposizione")
  • Buco: ISO 8601 / RFC 3339 non può rappresentare senza ambiguità un'ora dentro il buco
  • Sovrapposizione: annota quale occorrenza con un offset esplicito (UTC−5 vs UTC−4)
  • Python: zoneinfo gestisce buco/sovrapposizione tramite l'attributo fold (0 = prima occorrenza, 1 = seconda)
  • JavaScript Temporal: ZonedDateTime accetta un'opzione di disambiguazione ("earlier", "later", "compatible", "reject")
  • Un cron alle 02:30 in un fuso con DST salta al passaggio o scatta due volte al ritorno — pianifica in UTC se possibile

Quali regioni applicano il DST

L'adozione del DST è a macchia di leopardo e cambia regolarmente — consulta sempre i tzdata IANA attuali invece di codificare una regola a mano. Quanto segue è ampiamente corretto per il 2026.

  • Stati Uniti: la maggior parte degli stati applica il DST (marzo–novembre). L'Arizona (tranne la Navajo Nation) e le Hawaii no
  • Canada: la maggior parte delle province applica il DST. Saskatchewan, gran parte dello Yukon e (dal 2026) gran parte della Columbia Britannica no
  • Unione Europea: applica il DST (ultima domenica di marzo → ultima domenica di ottobre). Un voto del 2019 per abolirlo è stato rinviato
  • Regno Unito: applica il DST come BST (UTC+1) in estate
  • Messico: ha abolito il DST nazionale nel 2022; solo i comuni di confine allineati agli USA lo applicano ancora
  • Australia: solo NSW, Victoria, Tasmania, ACT e Australia Meridionale applicano il DST (ottobre–aprile)
  • Gran parte di Asia, Africa e Sud America: nessun DST

Gestire il DST in sicurezza nel codice

L'approccio affidabile è ancorare tutto su timestamp Unix (o date-ora con fuso IANA) e trattare l'ora locale come una questione di presentazione.

  • Memorizzare: secondi epoch Unix o un datetime consapevole del fuso (es. TIMESTAMPTZ in Postgres)
  • Calcolare: in UTC o in librerie di data-ora consapevoli di IANA (Temporal, zoneinfo, java.time)
  • Visualizzare: convertire nel fuso IANA dell'utente al momento del rendering
  • Pianificare: memorizzare il fuso IANA accanto all'ora da parete locale per eventi ricorrenti che devono restare alle "9 del mattino locali"
  • Non memorizzare mai l'abbreviazione EDT/PDT/CET come sostituto del nome IANA

La spinta per abolire il DST

Diversi parlamenti hanno votato per abolire i cambi d'ora semestrali; pochi di quei voti hanno portato a reali cambiamenti di politica. Attività recente di rilievo:

  • 2022: il Senato USA ha approvato all'unanimità il Sunshine Protection Act, che si è arenato alla Camera
  • 2022: il Messico ha abolito il DST nazionale
  • 2024: Trump si è opposto pubblicamente al DST permanente; lo slancio al Senato è rallentato
  • 2026: la Columbia Britannica è passata a UTC−7 permanente; la Commissione Energia e Commercio della Camera USA ha fatto avanzare un nuovo testo di abolizione del DST
  • 2019: l'UE ha votato in linea di principio per abolire il DST ma ne ha ripetutamente rinviato l'attuazione

Riferimenti correlati

FAQ

Il DST influisce sui timestamp Unix?
No. I timestamp Unix contano i secondi UTC dal 1970 e proseguono senza scosse attraverso ogni transizione di DST. Cambia solo l'interpretazione in ora locale di quei secondi.
Cos'è un'ora ambigua?
Un'ora ambigua è un'ora locale che corrisponde a due istanti UTC diversi. Accade al ritorno all'ora solare, quando l'orologio torna da 02:00 a 01:00 e l'ora 01:00–01:59 si verifica due volte. Disambigua con un offset esplicito o l'opzione fold / di disambiguazione di una libreria.
Cosa succede ai job pianificati alla transizione di DST?
Un job cron in un fuso con DST pianificato alle 02:30 verrà saltato (passaggio all'ora legale) o eseguito due volte (ritorno all'ora solare). La soluzione è pianificare in UTC o usare uno scheduler che disambigua esplicitamente.
Nel codice si usa "EST" o "America/New_York"?
America/New_York. Il nome IANA applica automaticamente EST (UTC−5) in inverno e EDT (UTC−4) in estate. Codificare "EST" a mano significa che i valori sono sbagliati per metà anno.
Come gestisco correttamente il DST nel codice?
Memorizza e calcola in UTC (o con date-ora con fuso IANA) e converti in ora locale solo per la visualizzazione. Usa nomi di fuso IANA come America/New_York, mai offset fissi o abbreviazioni come EST, così il DST viene applicato per te.
Quando iniziano e finiscono il DST nel 2026?
Negli USA il DST inizia alle 02:00 locali l'8 marzo 2026 (avanti alle 03:00) e finisce alle 02:00 locali il 1° novembre 2026 (indietro all'01:00). Nell'UE le transizioni sono il 29 marzo e il 25 ottobre 2026.