8 min

Fusi orari nelle app di pianificazione: regole che prevengono utenti arrabbiati

I fusi orari nelle app di scheduling sono una delle principali cause di riunioni mancate. Scopri modelli dati più sicuri, regole per le ricorrenze, insidie del DST e copy user-friendly.

Fusi orari nelle app di pianificazione: regole che prevengono utenti arrabbiati

Perché i fusi orari fanno sembrare inaffidabili le app di scheduling

I fusi orari trasformano piccoli errori di calcolo in promesse mancate. Una riunione che si sposta di un'ora non è "abbastanza vicina". Cambia chi si presenta, chi sembra impreparato e chi perde qualcosa di importante. Dopo che succede due volte, le persone smettono di fidarsi del calendario e iniziano a verificare tutto in chat.

Il problema di fondo è che l'orario sembra assoluto per gli esseri umani, ma nel software non lo è. Le persone pensano in orario locale ("9:00 AM ora mia"). I computer spesso pensano in offset ("UTC+2") che possono cambiare durante l'anno. Quando la tua app mescola queste idee, può mostrare l'orario giusto oggi e quello sbagliato il mese prossimo.

I sintomi sembrano anche casuali, il che li rende peggiori. Gli utenti segnalano cose come riunioni che "si spostano" anche se nessuno le ha modificate, promemoria che scattano in anticipo o in ritardo, serie in cui solo alcune istanze si spostano di un'ora, inviti che mostrano orari diversi su dispositivi differenti o eventi duplicati che appaiono dopo un viaggio.

Chi subisce di più sono le persone che dipendono maggiormente dalla pianificazione: team remoti in molti paesi, clienti che prenotano oltre confine e chiunque viaggi. Un product manager che vola da New York a Londra potrebbe aspettarsi che una riunione delle 14:00 resti ancorata al fuso orario dell'organizzatore, mentre il viaggiatore si aspetta che segua l'orario locale attuale. Entrambe le aspettative sono ragionevoli. Solo una può essere vera, quindi servono regole chiare.

Non si tratta solo di quale orario mostri sulla scheda dell'evento. Le regole sui fusi orari toccano tutta la superficie di scheduling: eventi singoli, eventi ricorrenti, promemoria, email di invito e qualsiasi cosa che si attivi in un momento specifico. Se non definisci la regola per ciascuno di questi, il tuo modello dati la definirà silenziosamente per te e gli utenti lo scopriranno in modo doloroso.

Un esempio semplice: uno standup settimanale "lunedì 9:00 AM" viene creato a marzo. Ad aprile, il DST cambia per la regione di un partecipante. Se la tua app lo ha memorizzato come "ogni 7 giorni allo stesso istante UTC", quel partecipante lo vede improvvisamente alle 10:00 AM. Se la tua app lo ha memorizzato come "ogni lunedì alle 9:00 AM nel fuso orario dell'organizzatore", rimane alle 9:00 AM e cambia invece l'istante UTC. Qualsiasi scelta può funzionare, ma l'app deve essere coerente e onesta al riguardo.

Termini chiave: UTC, ora locale, offset e DST

La maggior parte dei bug sui fusi orari deriva dal confondere poche idee di base. Usare le parole giuste rende anche la copia dell'interfaccia più chiara.

UTC e "tempo assoluto"

UTC (Coordinated Universal Time) è l'orologio di riferimento globale. Pensalo come la singola linea temporale che tutti condividono.

Un "tempo assoluto" è un momento specifico su quella linea temporale, per esempio 2026-01-16 15:00:00 UTC. Se due persone in paesi diversi guardano quel momento, dovrebbero vedere lo stesso istante, solo mostrato con orologi locali diversi.

Ora locale, offset e ID di fuso orario

L'ora locale è ciò che una persona vede sul suo orologio, come "9:00 AM". Di per sé non basta per identificare un istante. Serve una regola di posizione.

Un offset è la differenza da UTC in un momento, ad esempio UTC+2 o UTC-5. Gli offset cambiano durante l'anno in molti posti, quindi memorizzare solo "UTC+2" è rischioso.

Un ID di fuso orario è la vera regola, solitamente un nome IANA come "America/New_York" o "Europe/Berlin". Gli ID catturano la storia e i cambiamenti futuri di quella zona, incluso il DST.

Differenza pratica:

  • Offset: "UTC-5" (nessuna promessa che rimanga così)
  • ID fuso orario: "America/New_York" (sa quando diventa UTC-4)

DST (ora legale)

Il DST è quando una regione sposta le lancette avanti o indietro, di solito di un'ora. Questo significa che l'offset da UTC cambia.

Due sorprese del DST:

  • "Spring forward" crea un'ora mancante. Alcuni orari locali semplicemente non esistono.
  • "Fall back" ripete un'ora. Lo stesso orario locale accade due volte.

Tempo assoluto vs orologio da parete

L'orologio da parete è quello che gli utenti digitano: "Ogni lunedì alle 9:00 AM". Il tempo assoluto è ciò che il sistema deve eseguire: "invia il promemoria in questo esatto momento UTC". Gli eventi ricorrenti spesso iniziano come regole basate sull'orologio da parete e poi vengono convertiti in una serie di istanti assoluti.

Gli utenti pensano di aver prenotato "9:00 AM nel mio fuso orario". Il tuo database potrebbe memorizzare "2026-03-10 13:00 UTC". Entrambi possono essere corretti, ma solo se ricordi anche quale regola di fuso orario era intesa.

I dispositivi cambiano anche fuso orario. Le persone viaggiano e i laptop possono cambiare automaticamente zona. Se la tua app reinterpreta silenziosamente un "9:00 AM" salvato usando la nuova zona del dispositivo, gli utenti sentiranno che l'orario si è "mosso" anche se non hanno fatto nulla.

Scelte del modello dati che evitano spostamenti silenziosi

La maggior parte dei bug "la mia riunione si è spostata" sono bug del modello dati. Il default più sicuro per eventi una tantum è: memorizzare un singolo istante in UTC e convertirlo nell'orario locale dell'utente solo quando lo mostri.

Un evento una tantum è qualcosa come "12 ott 2026 alle 15:00 a Berlino." Quell'istante accade una sola volta. Se lo memorizzi come UTC (un istante sulla linea temporale), tornerà sempre lo stesso momento, ovunque guardi.

Memorizzare solo un orario locale (come "15:00") fallisce non appena qualcuno lo guarda da un altro fuso, o il creatore cambia le impostazioni del dispositivo. Memorizzare solo un offset (come "+02:00") fallisce dopo perché gli offset cambiano con il DST. "+02:00" non è un luogo, è solo una regola temporanea.

Quando dovresti memorizzare un ID di fuso orario insieme all'UTC? Ogni volta che ti interessa cosa intendeva il creatore, non solo quale istante hai salvato. Un ID come "Europe/Berlin" aiuta con la visualizzazione, il supporto e l'audit, ed è essenziale per gli eventi ricorrenti. Ti permette di dire: "Questo evento è stato creato come 15:00 ora di Berlino," anche se l'offset di Berlino cambia il mese dopo.

Un record pratico per un evento una tantum di solito include:

  • start_at_utc (e end_at_utc)
  • created_at_utc
  • creator_time_zone_id (nome IANA)
  • original_input (il testo o i campi inseriti dall'utente)
  • input_offset_minutes (opzionale, per il debugging)

Per il supporto, questi campi trasformano un reclamo vago in una riproduzione chiara: cosa ha digitato l'utente, quale zona dichiarava il suo dispositivo e quale istante il sistema ha salvato.

Sii rigoroso su dove avviene la conversione. Tratta il server come fonte di verità per la memorizzazione (solo UTC) e il client come fonte di intenzione (ora locale più un ID di fuso). Converti l'ora locale in UTC una sola volta, al momento della creazione o della modifica, e non "riconvertire" l'UTC salvato nelle letture successive. Gli spostamenti silenziosi spesso accadono quando sia client che server applicano conversioni, o quando una delle parti indovina il fuso anziché usare quello fornito.

Se accetti eventi da più client, registra l'ID di fuso orario e validalo. Se manca, chiedi all'utente di sceglierlo invece di indovinare. Questa piccola conferma evita molti ticket arrabbiati più avanti.

Passo dopo passo: dall'input utente all'evento salvato alla visualizzazione

Quando gli utenti continuano a vedere orari "muoversi", di solito è perché parti diverse del sistema convertono gli orari in modi diversi.

Scegli un luogo come fonte di verità per le conversioni. Molti team scelgono il server perché garantisce lo stesso risultato per web, mobile, email e job in background. Il client può comunque mostrare un'anteprima, ma il server dovrebbe confermare i valori finali salvati.

Un flusso sicuro da seguire

Una pipeline ripetibile evita la maggior parte delle sorprese:

  • Input utente: cattura l'orario da parete che hanno digitato (per esempio, 2026-03-10 09:00) e la zona dell'evento come nome IANA (America/New_York), non un'abbreviazione come "EST".
  • Normalizza: valida che l'orario locale esista in quella zona (il DST può creare orari mancanti), poi converti in un istante.
  • Salva: memorizza l'istante in UTC più l'ID di zona IANA (e, se ti serve dopo, l'orario locale originale scelto).
  • Mostra: quando visualizzi, converti l'istante UTC salvato nella zona corrente del visualizzatore e etichettalo chiaramente ("9:00 AM ora di New York").
  • Notifica: programma i promemoria dall'istante UTC, ma formatta il messaggio nel fuso orario locale del destinatario.

Esempio: un host a New York crea "Mar 10, 9:00 AM (America/New_York)." Un collega a Berlino lo vede come "3:00 PM (Europe/Berlin)" perché lo stesso istante UTC viene mostrato nella loro zona.

Eventi tutto il giorno e campi solo data

Tutto il giorno non è "00:00 UTC a 00:00 UTC." È di solito un intervallo di date in una zona specifica. Memorizza gli all-day come valori solo-data (start_date, end_date) più la zona usata per interpretare quelle date. Altrimenti, un evento tutto il giorno può apparire iniziato il giorno precedente per utenti a ovest di UTC.

Prima di rilasciare, testa il caso reale: crea un evento, cambia il fuso del dispositivo, poi riaprilo. L'evento dovrebbe ancora rappresentare lo stesso momento (per eventi con orario) o la stessa data locale (per eventi tutto il giorno), non spostarsi silenziosamente.

Eventi ricorrenti: scegli la regola prima dello schema

Gestisci la tua implementazione
Mantieni il controllo completo: esporta il codice sorgente quando la logica di scheduling è pronta.

La maggior parte dei bug di scheduling appare quando un evento si ripete. L'errore comune è trattare la ricorrenza come "copiare semplicemente la data avanti." Decidi prima a cosa è ancorato l'evento:

  • Ancorato a un istante: l'evento si ripete allo stesso momento nel tempo (lo stesso istante UTC), quindi l'orario locale può cambiare quando il DST si sposta.
  • Ancorato all'orario locale: l'evento si ripete alla stessa ora locale in una zona specifica, anche se l'istante UTC cambia.

Per la maggior parte dei calendari (riunioni, promemoria, orari d'ufficio), gli utenti si aspettano l'ora di parete. "Ogni lunedì alle 9:00" di solito significa le 9:00 nella città scelta, non "lo stesso istante UTC per sempre."

Cosa memorizzare (così puoi spiegarlo dopo)

Memorizza la ricorrenza come una regola più il contesto necessario per interpretarla, non come una lista pre-generata di timestamp:

  • Data e ora locali di inizio (quello che l'utente ha digitato)
  • ID fuso orario (IANA)
  • Regola di ricorrenza (frequenza, intervallo, giorni)
  • Eccezioni (salti, modifiche a singole istanze)
  • Condizione di fine opzionale (conteggio o data di termine, in termini locali)

Questo ti aiuta a gestire il DST senza "spostamenti silenziosi" e rende prevedibili le modifiche.

Generare occorrenze senza deriva

Quando ti servono eventi per un intervallo di date, genera in orario locale nella zona dell'evento, poi converti ciascuna istanza in UTC per la memorizzazione o il confronto. La chiave è aggiungere "una settimana" o "prossimo lunedì" in termini locali, non "+ 7 * 24 ore" in UTC.

Un semplice test mentale: se l'utente ha scelto 9:00 settimanale a Berlino, ogni istanza generata dovrebbe essere le 9:00 ora di Berlino. Il valore UTC cambierà quando Berlino passa al DST, e questo è corretto.

Quando gli utenti viaggiano, sii esplicito sul comportamento. Un evento ancorato a Berlino dovrebbe comunque accadere alle 9:00 ora di Berlino, e un viaggiatore a New York lo vedrà convertito nel suo orario locale. Se supporti eventi "floating" che seguono il fuso corrente del visualizzatore, etichettali chiaramente. Sono utili, ma sorprendono le persone se non sono chiaramente indicati.

Insidie del DST che causano i ticket più arrabbiati

I problemi di DST sembrano casuali agli utenti perché l'app mostra un orario quando lo prenotano e poi ne mostra uno diverso più tardi. La soluzione non è solo tecnica. Serve regole chiare e parole chiare.

Quando le lancette vanno avanti, alcuni orari locali semplicemente non esistono. Un esempio classico è le 02:30 nella giornata di inizio del DST. Se permetti a qualcuno di sceglierlo, devi decidere cosa significa.

Quando le lancette tornano indietro, accade il contrario: lo stesso orario locale capita due volte. "01:30" può significare la prima occorrenza (prima dello spostamento) o la seconda (dopo lo spostamento). Se non chiedi, stai indovinando, e le persone se ne accorgeranno quando si collegheranno un'ora prima o dopo.

Regole pratiche che prevengono sorprese:

  • Se un orario scelto non esiste (spring forward), bloccalo e spiega il motivo, oppure spostalo automaticamente al prossimo orario valido e mostra subito la modifica.
  • Se un orario scelto è duplicato (fall back), chiedi "Quale 01:30?" e etichetta le scelte come "prima" e "dopo" con l'offset.
  • Se un meeting esistente diventa invalido a causa di un cambio di regole (gli aggiornamenti di fuso avvengono), preserva l'intento originale quando possibile e avvisa se devi spostarlo.
  • Per i promemoria, programma in base all'istante reale dell'evento, non a "N minuti prima dell'orologio da parete."
  • Non definirlo mai come errore dell'utente. Inquadra la cosa come un cambiamento dell'orologio in quella posizione.

Un avvio realistico di ticket di supporto: qualcuno prenota "02:30" a New York per il mese prossimo, poi il giorno arriva e l'app mostra silenziosamente "03:30". Una copia migliore al momento della creazione è semplice: "Questo orario non esiste il 10 mar a causa del cambio dell'orologio. Scegli 01:30 o 03:00." Se aggiusti automaticamente, dì: "L'abbiamo spostato alle 03:00 perché le 02:30 sono saltate quel giorno."

Se tratti il DST come un caso limite dell'interfaccia, apparirà come problema di fiducia. Se lo tratti come una regola di prodotto, diventa prevedibile.

Errori comuni e trappole da evitare

Rilascia un prototipo testabile
Avvia una demo web funzionante di scheduling che puoi condividere con il team o i clienti.

La maggior parte dei ticket arrabbiati proviene da alcuni errori ripetuti. L'app sembra "cambiare" un orario, ma il vero problema è che le regole non sono mai state rese esplicite nei dati, nel codice e nella copia.

Trappole di dati e storage

Un fallimento comune è salvare solo un offset (come -05:00) invece di un vero fuso IANA (come America/New_York). Gli offset cambiano quando il DST inizia o finisce, quindi un evento che sembrava corretto a marzo può essere sbagliato a novembre.

Le abbreviazioni dei fusi orari sono un'altra fonte frequente di bug. "EST" può significare cose diverse per persone e sistemi diversi, e alcune piattaforme mappano le abbreviazioni in modo incoerente. Memorizza un ID completo di fuso orario e tratta le abbreviazioni come testo di sola visualizzazione, se le mostri.

Gli eventi tutto il giorno sono una categoria a sé. Se memorizzi un evento tutto il giorno come "mezzanotte UTC", gli utenti in offset negativi spesso lo vedono iniziare il giorno prima. Memorizza gli eventi tutto il giorno come date più la zona usata per interpretarle.

Una breve checklist per il code review:

  • Non memorizzare orari solo con offset e aspettarti che il DST funzioni.
  • Non accettare "EST/PST/CET" come fuso affidabile.
  • Non memorizzare eventi tutto il giorno come istanti (00:00 UTC).
  • Non programmare i promemoria nel fuso del server invece che in quello dell'evento.
  • Non lasciare che web e mobile calcolino le conversioni in modo diverso.

Consegna, promemoria e discrepanze cross-platform

I promemoria e gli inviti possono andare storti anche quando lo storage dell'evento è corretto. Esempio: un utente crea "9:00 AM ora di Berlino" e si aspetta un promemoria alle 8:45 AM ora di Berlino. Se il tuo job scheduler gira in UTC e per errore tratti "8:45" come ora locale del server, i promemoria partiranno in anticipo o in ritardo.

Le differenze tra piattaforme aggravano il problema. Un client potrebbe interpretare un'ora ambigua usando la zona del dispositivo, un altro usa la zona dell'evento e un terzo applica una regola DST in cache. Se vuoi comportamento coerente, tieni conversioni ed espansione delle ricorrenze in un solo posto (di solito il server) così ogni client vede lo stesso risultato.

Un semplice test di sanity: crea un evento durante la settimana del cambio DST, visualizzalo su due dispositivi impostati su zone diverse e conferma che ora di inizio, data e promemoria corrispondano alla regola promessa agli utenti.

Controlli rapidi prima di rilasciare le funzionalità di scheduling

La maggior parte dei bug sui fusi orari non sembra un bug durante lo sviluppo. Appaiono quando qualcuno viaggia, quando il DST scatta o quando due persone confrontano screenshot.

Controlli su dati e storage

Assicurati che il modello dati corrisponda al tipo di orario con cui hai a che fare. Un evento una tantum necessita di un singolo vero momento nel tempo. Un evento ricorrente necessita di una regola legata a un luogo.

  • Per eventi one-time, memorizza un istante esatto (UTC) più il contesto originale visibile all'utente se devi mostrare "cosa hanno scelto" dopo.
  • Per tutto ciò che è ricorrente o rivolto all'utente, memorizza l'ID IANA del fuso orario (come America/New_York), non solo un offset.
  • Mantieni una chiara distinzione tra orari "floating" (come "ogni giorno alle 9:00" in una zona specifica) e istanti (come 2026-01-16T14:00Z).

Controlli DST e casi limite

Il DST crea due momenti pericolosi: orari che non esistono (spring forward) e orari che esistono due volte (fall back). La tua app deve decidere cosa fare, e farlo con coerenza.

  • Quando un utente sceglie un orario non esistente, bloccalo con un messaggio chiaro o spostalo automaticamente al prossimo orario valido (e dillo).
  • Quando un utente sceglie un orario ambiguo (ora duplicata), fagli scegliere quale, o applica una regola (prima vs dopo) e documentala.
  • Verifica gli eventi ricorrenti attraverso la barriera DST. Decidi se "9:00 locale" resta alle 9:00, o se l'istante UTC resta fisso. Scegline una e mantienila.

Scenario da testare: un sync settimanale impostato su "Lunedì 09:00" a Berlino. Controlla l'orario della riunione per qualcuno a New York prima e dopo che l'Europa cambi il DST, e di nuovo dopo che gli USA cambiano il DST (si attivano in date diverse).

Controlli UI e aspettative

Molti ticket arrabbiati nascono da interfacce che nascondono il fuso orario. Le persone presumono ciò che vogliono sia vero.

  • Mostra il fuso orario ovunque appaia un orario: dettagli evento, schermi di conferma, email, promemoria ed esportazioni.
  • Se programmi per qualcun altro, mostra entrambe le zone: "09:00 Europe/Berlin (03:00 America/New_York)".
  • Rendi i controlli del fuso evidenti e rifletti la zona scelta nella copia ("Questo evento è programmato in Europe/Berlin").

Controlli di test

Non fare affidamento solo sul fuso del tuo laptop e su un singolo formato locale.

  • Aggiungi test per il viaggio: crea un evento in una zona, poi visualizzalo in un'altra.
  • Aggiungi test che coprano l'inizio e la fine del DST, includendo l'ora mancante e quella duplicata.
  • Testa più formati locali (12h vs 24h, giorno-mese vs mese-giorno) per evitare segnalazioni di "giorno sbagliato."

Un esempio realistico: una riunione, due paesi, un cambio DST

Pianifica il comportamento dei fusi orari
Mappa le regole prima di scrivere codice: cosa resta fisso, cosa si converte e cosa vede l'utente.

Un founder a Londra programma uno standup settimanale con un collega a New York. Scelgono "Martedì alle 10:00" e presumono che resti una mattina per Londra e presto per New York.

Una configurazione più sicura è trattare la riunione come "10:00 in Europe/London ogni martedì," calcolare ogni occorrenza in orario di Londra, salvare l'effettivo istante (UTC) per quell'occorrenza e mostrarlo nell'orario locale di ciascun visualizzatore.

Intorno al gap di primavera, gli USA cambiano le lancette prima del Regno Unito:

  • Prima dello switch USA: 10:00 a Londra (GMT) appare come 05:00 a New York (EST).
  • Dopo lo switch USA ma prima di quello UK: 10:00 a Londra (ancora GMT) appare come 06:00 a New York (EDT).
  • Dopo lo switch UK: 10:00 a Londra (BST) appare di nuovo come 05:00 a New York (EDT).

Nulla si è "mosso" per l'organizzatore. La riunione è rimasta alle 10:00 ora di Londra. L'unica cosa cambiata è l'offset di New York per un paio di settimane.

I promemoria dovrebbero seguire ciò che ciascuno vede, non ciò che "vedeva prima." Se il teammate di New York ha un promemoria 15 minuti prima, questo dovrebbe scattare alle 05:45 prima del cambio USA, poi alle 06:45 durante le settimane del gap, senza che nessuno modifichi l'evento.

Aggiungi una modifica: dopo due mattine difficili, l'organizzatore di Londra cambia lo standup alle 10:30 ora di Londra a partire dalla prossima settimana. Un buon sistema preserva l'intento applicando la modifica nel fuso dell'organizzatore, generando nuovi istanti UTC per le occorrenze future e lasciando inalterate le occorrenze passate.

Una buona copia previene i ticket di supporto: "Si ripete ogni martedì alle 10:00 (ora di Londra). Gli invitati lo vedono nel loro orario locale. Gli orari possono spostarsi di 1 ora quando inizia o finisce l'ora legale."

Passi successivi: copia UX più chiara e piano di sviluppo più sicuro

La maggior parte dei "bug sui fusi orari" segnalati dagli utenti sono in realtà bug di aspettativa. Il tuo modello dati può essere corretto, ma se la copia dell'interfaccia è vaga, le persone presumono che l'app leggerà la loro mente. Tratta i fusi orari come una promessa UX, non solo un dettaglio backend.

Inizia con una copia che nomini il fuso ovunque un orario appaia fuori dall'interfaccia principale, specialmente in notifiche e email. Non fare affidamento su un semplice "10:00 AM". Metti la zona subito accanto e mantieni il formato coerente.

Pattern di copy che riducono la confusione:

  • "Mar, 12 mar, 10:00 AM (America/New_York)"
  • "Per te è le 15:00 (Europe/London)"
  • "Questo evento è salvato in: ora di New York"
  • "Se viaggi, questa riunione rimane all'orario di New York"
  • "Gli orari possono spostarsi di 1 ora quando inizia o finisce l'ora legale"

I giorni DST richiedono anche messaggi di errore amichevoli. Se un utente sceglie un orario inesistente (come le 2:30 AM nella notte del spring-forward), evita termini tecnici e offri opzioni: "Le 2:30 AM non sono disponibili il 10 mar perché gli orologi saltano avanti. Scegli 1:30 AM o 3:30 AM." Se un orario avviene due volte nella notte del fall-back, chiedi semplicemente: "Intendi la prima 1:30 AM o la seconda?"

Per costruire in modo più sicuro, prototipa il flusso completo (crea, invita, visualizza in un'altra zona, modifica dopo il DST) prima di rifinire gli schermi:

  • Scrivi le regole in un paragrafo (cosa resta fisso, cosa si converte).
  • Bozza il modello dati (salva UTC più il fuso IANA originale).
  • Bozza le email e i testi delle notifiche insieme all'interfaccia.
  • Testa tre scenari: viaggio, spring-forward, fall-back.
  • Blocca le decisioni, poi implementa.

Se stai costruendo una funzionalità di scheduling rapidamente, una piattaforma chat-to-app come Koder.ai può aiutarti a iterare regole, schema e UI insieme. La velocità è ottima, ma la stessa disciplina si applica: memorizza istanti in UTC, conserva il fuso IANA dell'evento per l'intento e mostra sempre agli utenti quale fuso stanno guardando.

Domande frequenti

Devo memorizzare gli eventi del calendario in UTC o nell'ora locale?

Memorizza gli eventi una tantum come istanti UTC precisi, quindi convertili nell'ora locale di ciascun utente quando li mostri. Conserva anche l'ID del fuso orario IANA dell'evento, così puoi rispettare l'intenzione del creatore.

Perché un offset UTC non è sufficiente?

Usa un ID del fuso orario IANA, ad esempio America/New_York o Europe/Berlin. Un offset come UTC-5 può cambiare quando inizia o termina l'ora legale, mentre l'ID del fuso include queste regole sull'orario.

Come dovrebbero gestire l'ora legale le riunioni ricorrenti?

Per la maggior parte delle riunioni, mantieni l'evento alla stessa ora locale nel fuso scelto dall'organizzatore. Genera ogni occorrenza in quel fuso, poi converti ciascuna in UTC. Così una riunione settimanale alle 9:00 resta alle 9:00 dopo i cambi dell'ora legale.

Cosa dovrebbe fare la mia app con un orario che non esiste durante l'ora legale?

Impedisci la selezione e spiegalo chiaramente, oppure sposta l'orario al successivo valido e mostra la modifica prima del salvataggio. Ad esempio, informa l'utente che le 2:30 vengono saltate perché gli orologi vengono portati avanti.

Cosa succede quando la stessa ora locale si verifica due volte?

Chiedi all'utente se intende l'occorrenza precedente o successiva e mostra l'offset per ogni scelta. La stessa ora locale può verificarsi due volte quando gli orologi tornano indietro, quindi fare supposizioni può programmare la riunione con un'ora di scarto.

Una riunione dovrebbe seguire una persona quando viaggia?

La riunione dovrebbe restare legata al fuso orario scelto per l'evento, a meno che tu non offra chiaramente un'opzione di orario fluttuante. Chi viaggia vede lo stesso istante convertito nell'ora locale corrente, senza modificare la riunione per tutti.

Come devo memorizzare gli eventi che durano tutto il giorno?

Memorizza gli eventi che durano tutto il giorno come date di inizio e fine, insieme al fuso che dà significato a tali date. Non trasformarli in timestamp UTC di mezzanotte, perché le persone in altri fusi potrebbero vedere l'evento nel giorno sbagliato.

Dove dovrei mostrare il fuso orario dell'evento?

Mostra il fuso orario ovunque gli utenti debbano agire in base a un orario: dettagli dell'evento, conferme, email di invito, promemoria ed esportazioni. Quando le persone pianificano tra fusi diversi, mostrare sia il fuso dell'evento sia l'ora locale dell'utente evita confusione.

Il client o il server dovrebbe convertire l'ora locale in UTC?

Fai inviare al client l'ora locale e l'ID del fuso IANA, poi lascia che il server li convalidi e li converta in UTC. Il server dovrebbe produrre il valore finale memorizzato, così web, dispositivi mobili, email e processi dei promemoria seguono la stessa regola.

Quali casi relativi ai fusi orari dovrei testare prima del lancio?

Prima del lancio, testa i viaggi, l'ora mancante durante l'ora legale, l'ora ripetuta durante l'ora legale, gli eventi ricorrenti a cavallo dell'ora legale, gli eventi che durano tutto il giorno e le visualizzazioni da almeno due fusi orari. Verifica anche che promemoria ed email mostrino la stessa regola oraria del calendario.

Related posts