09 gen 2025·8 min di lettura

Bug dell'ora legale: regole per timestamp e report

Regole pratiche per evitare bug dell'ora legale: memorizza timestamp puliti in UTC, mostra l'ora locale corretta e crea report verificabili e affidabili.

Bug dell'ora legale: regole per timestamp e report

Perché questi bug capitano nei prodotti comuni

I bug temporali compaiono nei prodotti normali perché le persone non vivono in UTC. Vivono in ora locale, e l'ora locale può saltare avanti, tornare indietro o cambiare regole nel corso degli anni. Due utenti possono guardare lo stesso momento e vedere orologi diversi. Peggio ancora, lo stesso orario locale può corrispondere a due momenti reali distinti.

I bug legati all'ora legale (DST) spesso si manifestano solo due volte l'anno, quindi sfuggono ai controlli. Tutto sembra a posto in sviluppo, poi un cliente prenota un appuntamento, compila un foglio presenze o controlla un report nel weekend del cambio e qualcosa non quadra.

I team notano di solito alcuni schemi: un “ora mancante” dove elementi pianificati scompaiono o si spostano, un'ora duplicata dove i log o gli alert sembrano raddoppiati, e totali giornalieri che derivano perché un “giorno” è durato 23 o 25 ore.

Non è solo un problema da sviluppatori. Il supporto riceve ticket come “la vostra app ha cambiato l'orario della mia riunione.” La finanza vede entrate giornaliere non corrispondenti. Le operation si chiedono perché job notturni sono stati eseguiti due volte o saltati. Anche i filtri “creato oggi” possono discordare tra utenti in regioni diverse.

L'obiettivo è noioso e affidabile: memorizzare il tempo in modo che non perda mai significato, mostrare l'ora locale come le persone si aspettano e costruire report che restino veritieri anche nei giorni strani. Così tutte le parti del business possono fidarsi dei numeri.

Che tu stia costruendo con codice personalizzato o con una piattaforma come AppMaster (appmaster.io), le regole sono le stesse. Vuoi timestamp che preservino il momento originale, più abbastanza contesto (come il fuso orario dell'utente) per spiegare come quel momento appariva sul loro orologio.

Un modello rapido e in linguaggio semplice del tempo

La maggior parte dei bug DST nasce dal confondere “un momento nel tempo” con “come un orologio lo mostra”. Se separi queste idee, le regole diventano molto più semplici.

Alcuni termini, in parole semplici:

  • Timestamp: un momento preciso sulla linea del tempo (indipendente da dove ti trovi).
  • UTC: un orologio di riferimento globale usato per rappresentare i timestamp in modo coerente.
  • Ora locale: ciò che una persona vede su un orologio a parete in un luogo (per esempio le 9:00 a New York).
  • Offset: la differenza da UTC in un momento particolare, scritta come +02:00 o -05:00.
  • Fuso orario: un nome che indica l'insieme di regole che determinano l'offset per ogni data, come America/New_York.

Un offset non è la stessa cosa di un fuso orario. -05:00 ti dice solo la differenza da UTC in un singolo momento. Non ti dice se il luogo passa a -04:00 in estate o se le leggi cambiano l'anno prossimo. Un nome di fuso orario lo fa, perché contiene le regole e la storia.

La DST cambia l'offset, non il timestamp sottostante. L'evento è comunque avvenuto nello stesso momento; cambia solo l'etichetta dell'orologio locale.

Due casi causano la maggior parte della confusione:

  • Salto primaverile: l'orologio salta in avanti, quindi un intervallo di orari locali non esiste (per esempio le 2:30 AM può essere impossibile).
  • Ripetizione autunnale: l'orologio ripete un'ora, quindi lo stesso orario locale accade due volte (per esempio le 1:30 AM può essere ambiguo).

Se un ticket di supporto è creato alle “1:30 AM” durante la ripetizione autunnale, hai bisogno del fuso orario e del momento esatto (timestamp UTC) per ordinare correttamente gli eventi.

Regole sui dati che prevengono la maggior parte dei problemi

La maggior parte dei bug DST inizia come un problema di dato, non di formato. Se il valore memorizzato è poco chiaro, ogni schermata e report dovrà indovinare, e questi indovinelli non saranno concordi.

Regola 1: Memorizza gli eventi reali come un momento assoluto (UTC)

Se qualcosa è avvenuto in un momento specifico (un pagamento acquisito, una risposta a un ticket, un turno iniziato), memorizza il timestamp in UTC. UTC non salta avanti o indietro, quindi resta stabile rispetto ai cambi DST.

Esempio: un agente di supporto a New York risponde alle 9:15 AM ora locale nel giorno del cambio. Memorizzare il momento in UTC mantiene quella risposta nell'ordine giusto quando qualcuno a Londra rivede la conversazione più tardi.

Regola 2: Conserva il contesto del fuso orario come un ID fuso IANA

Quando devi mostrare il tempo in modo comprensibile, devi conoscere il fuso orario dell'utente o della sede. Memorizzalo come un ID fuso IANA come America/New_York o Europe/London, non come un'etichetta vaga come “EST.” Le abbreviazioni possono significare cose diverse e gli offset da soli non catturano le regole DST.

Un pattern semplice è: tempo evento in UTC, più un campo tz_id separato collegato all'utente, ufficio, negozio o dispositivo.

Regola 3: Memorizza i valori solo-data come date, non come timestamp

Alcuni valori non sono momenti nel tempo. Compleanni, “si rinnova il 5” e “data di scadenza fattura” spesso dovrebbero essere memorizzati come campo data. Se li memorizzi come timestamp, le conversioni di fuso orario possono spostarli al giorno precedente o successivo.

Regola 4: Non memorizzare l'ora locale come stringa semplice senza contesto di fuso

Evita di salvare valori come “2026-03-08 02:30” o “9:00 AM” senza un fuso orario. Quell'ora può essere ambigua (accade due volte) o impossibile (saltata) durante le transizioni DST.

Se devi accettare input locali, memorizza sia il valore locale sia l'ID del fuso orario, e converti in UTC al confine (API o submit del form).

Decidere cosa memorizzare per ogni tipo di record

Molti bug DST succedono perché un tipo di record viene trattato come un altro. Un log di audit, una riunione del calendario e una chiusura di busta paga sembrano tutti “data e ora”, ma ognuno ha bisogno di dati diversi per restare veritiero.

Per eventi passati (cose già avvenute): memorizza un istante esatto, solitamente un timestamp UTC. Se potrebbe servire ricostruire come l'utente lo vedeva, memorizza anche il fuso orario dell'utente al momento dell'evento (un ID IANA come America/New_York, non solo “EST”). Questo ti permette di ricostruire ciò che era mostrato anche se l'utente cambia il fuso profilo in seguito.

Per la pianificazione (cose che devono accadere a un'ora locale): memorizza la data e l'ora locali intese più l'ID del fuso orario. Non convertirla in UTC e buttare via l'originale. “10 marzo alle 09:00 in Europe/Berlin” è l'intento. UTC è un valore derivato che può cambiare se cambiano le regole.

I cambiamenti sono normali: persone che viaggiano, uffici che si spostano, aziende che aggiornano policy. Per i record storici, non riscrivere i tempi passati quando un utente aggiorna il fuso nel profilo. Per le pianificazioni future, decidi se il piano segue l'utente (utile in caso di viaggio) o segue una sede fissa (utile per l'ufficio), e memorizza il fuso della location.

I dati legacy con solo timestamp locali sono complicati. Se conosci il fuso sorgente, allegalo e tratta il vecchio orario come locale. Se non lo conosci, marcialo come “floating” e sii onesto nei report (per esempio mostra il valore memorizzato senza conversione). Aiuta anche modellare questi casi come campi separati così interfacce e report non li confondono accidentalmente.

Passo dopo passo: memorizzare i timestamp in modo sicuro

Make time readable
Add UI labels that show date, time, and zone so users never have to guess.
Prototype Now

Per fermare i bug DST, scegli un sistema di registrazione inequivocabile per il tempo e poi converti solo quando lo mostri alle persone.

Scrivi la regola per il tuo team: tutti i timestamp nel database sono UTC. Mettilo nella documentazione e nei commenti di codice vicino alla gestione delle date. È una decisione che viene facilmente annullata col tempo.

Un pattern pratico di memorizzazione:

  • Scegli UTC come sistema di record e dai nomi ai campi che lo rendano ovvio (per esempio, created_at_utc).
  • Aggiungi i campi che servono realmente: un tempo evento in UTC (per esempio occurred_at_utc) e un tz_id quando il contesto locale è importante (usa un ID IANA come America/New_York, non un offset fisso).
  • Alla ricezione dell'input, raccogli data e ora locali più tz_id, poi converti in UTC una sola volta al confine (API o submit del form). Non convertire più volte tra i livelli.
  • Salva e interroga in UTC. Converti in ora locale solo ai bordi (UI, email, esportazioni).
  • Per azioni ad alto impatto (pagamenti, compliance, scheduling), registra anche cosa hai ricevuto (stringa locale originale, tz_id e l'UTC calcolato). Questo ti dà una traccia di audit quando gli utenti contestano un orario.

Esempio: un utente pianifica “5 nov, 9:00 AM” in America/Los_Angeles. Memorizzi occurred_at_utc = 2026-11-05T17:00:00Z e tz_id = America/Los_Angeles. Anche se le regole DST cambiano dopo, puoi ancora spiegare cosa intendeva e cosa hai registrato.

Se stai modellando questo in PostgreSQL (inclusi strumenti visuali di data modeling), rendi i tipi di colonna espliciti e coerenti e fai rispettare che l'app scriva sempre in UTC.

Mostrare l'ora locale che gli utenti possono capire

Fix time at the schema
Design clear timestamp and date-only fields in a visual PostgreSQL data model.
Model Data

La maggior parte dei bug DST appare nell'interfaccia, non nel database. Le persone leggono quello che mostri, lo copiano nei messaggi e pianificano in base a quello. Se lo schermo è poco chiaro, gli utenti assumeranno la cosa sbagliata.

Quando il tempo conta (prenotazioni, ticket, appuntamenti, fasce di consegna), mostralo come uno scontrino: completo, specifico e etichettato.

Mantieni la visualizzazione prevedibile:

  • Mostra data + ora + fuso orario (esempio: “10 mar 2026, 9:30 AM America/New_York”).
  • Poni l'etichetta del fuso vicino all'orario, non nascosta nelle impostazioni.
  • Se mostri testo relativo (“tra 2 ore”), tieni il timestamp esatto vicino.
  • Per elementi condivisi, considera di mostrare sia l'ora locale del visualizzatore sia il fuso dell'evento.

I casi limite DST richiedono comportamenti espliciti. Se permetti agli utenti di digitare qualsiasi orario, prima o poi accetterai un orario che non esiste o che si verifica due volte.

  • Salto primaverile (orari mancanti): blocca le selezioni invalide e offri l'orario valido successivo.
  • Ripetizione autunnale (orari ambigui): mostra l'offset o una scelta chiara (per esempio “1:30 AM UTC-4” vs “1:30 AM UTC-5”).
  • Modifica di record esistenti: preserva l'istantanea originale anche se cambia il formato.

Esempio: un agente di supporto a Berlino programma una chiamata con un cliente a New York per “3 nov, 1:30 AM.” Durante la ripetizione autunnale, quell'orario accade due volte a New York. Se l'interfaccia mostra “3 nov, 1:30 AM (UTC-4)”, la confusione scompare.

Costruire report che non mentono

I report distruggono la fiducia quando gli stessi dati danno totali diversi a seconda di chi li guarda. Per evitare bug DST, decidi cosa significa effettivamente “raggruppare per” in ogni report e mantienilo.

Per prima cosa, scegli il significato di “giorno” per ogni report. Un team di supporto spesso pensa in giorno locale del cliente. La finanza spesso ha bisogno del fuso orario legale dell'account. Alcuni report tecnici sono più sicuri se fatti su giorni UTC.

Raggruppare per giorno locale cambia i totali intorno alla DST. Nel giorno del salto primaverile viene saltata un'ora locale. Nel giorno della ripetizione autunnale un'ora si ripete. Se raggruppi eventi per “data locale” senza una regola chiara, un'ora intensa può sembrare mancante, raddoppiata o spostata nel giorno sbagliato.

Una regola pratica: ogni report ha un fuso di reporting e questo è visibile nell'intestazione (per esempio, “Tutte le date mostrate in America/New_York”). Questo rende i conti prevedibili e dà al supporto qualcosa di chiaro a cui riferirsi.

Per team multi-regione, va bene lasciare che le persone cambino il fuso del report, ma trattalo come una vista diversa della stessa verità. Due visualizzatori possono vedere bucket giornalieri diversi vicino a mezzanotte e alle transizioni DST. È normale, purché il report mostri chiaramente il fuso selezionato.

Alcune scelte che prevengono sorprese:

  • Definisci il confine del giorno del report (fuso utente, fuso account o UTC) e documentalo.
  • Usa un fuso per esecuzione del report e mostrane il nome vicino all'intervallo di date.
  • Per i totali giornalieri, raggruppa per data locale nel fuso scelto (non per data UTC).
  • Per grafici orari, etichetta le ore ripetute nei giorni di ripetizione autunnale.
  • Per le durate, memorizza e somma i secondi trascorsi, poi formatta per la visualizzazione.

Le durate richiedono cura. Un “turno di 2 ore” che attraversa la ripetizione autunnale è di 3 ore di orologio ma resta 2 ore di tempo trascorso se la persona ha effettivamente lavorato 2 ore. Decidi quale significato si aspettano gli utenti e applica arrotondamenti coerenti (per esempio arrotondare dopo la somma, non per riga).

Trappole comuni e come evitarle

Centralize time handling
Put time conversion rules in one place using shared business logic your whole app uses.
Build Now

I bug DST non sono “matematica difficile”. Nascono da piccole assunzioni che si insinuano col tempo.

Un fallimento classico è salvare un timestamp locale ma etichettarlo come UTC. Tutto sembra a posto finché qualcuno in un altro fuso apre il record e questo si sposta silenziosamente. La regola più sicura è semplice: memorizza un istante (UTC) più il contesto giusto (fuso utente o di luogo) quando il record ha bisogno di un significato locale.

Un'altra fonte frequente di bug è usare offset fissi come -05:00. Gli offset non conoscono i cambi DST o le regole storiche. Usa veri ID fuso IANA (come America/New_York) così il sistema può applicare la regola corretta per quella data.

Alcune abitudini che prevengono molte sorprese da “doppio turno”:

  • Converti solo ai bordi: parse input una volta, salva una volta, mostra una volta.
  • Mantieni una linea chiara tra campi “istantanei” (UTC) e campi “wall clock” (data/ora locali).
  • Salva l'ID del fuso insieme ai record che dipendono dall'interpretazione locale.
  • Rendi irrilevante il fuso del server leggendo e scrivendo sempre in UTC.
  • Per i report, definisci il fuso di report e mostrane il nome nell'UI.

Fai attenzione anche alle conversioni nascoste. Un pattern comune è: parsare l'ora locale dell'utente in UTC, poi una libreria UI assume che il valore sia locale e converte di nuovo. Il risultato è uno scarto di un'ora che appare solo per alcuni utenti e in alcune date.

Infine, non usare il fuso del dispositivo client per fatturazione o compliance. Il telefono di un viaggiatore può cambiare fuso a metà viaggio. Piuttosto, basa quei report su una regola aziendale esplicita, come il fuso dell'account cliente o la location del sito.

Testing: i pochi casi che intercettano la maggior parte dei bug

La maggior parte dei bug temporali appare solo pochi giorni all'anno, per questo sfuggono alla QA. La soluzione è testare i momenti giusti e rendere quei test ripetibili.

Scegli un fuso che osserva la DST (per esempio America/New_York o Europe/Berlin) e scrivi test per i due giorni di transizione. Poi scegli un fuso che non usa la DST (per esempio Asia/Singapore o Africa/Nairobi) così puoi vedere chiaramente la differenza.

I 5 test da conservare per sempre

  • Giorno del salto primaverile: verifica che l'ora mancante non possa essere pianificata e che le conversioni non inventino orari inesistenti.
  • Giorno della ripetizione autunnale: verifica l'ora duplicata, dove due momenti UTC diversi si mostrano come stessa ora locale. Assicurati che log e esportazioni possano distinguerli.
  • Attraversamento della mezzanotte: crea un evento che attraversa la mezzanotte in ora locale e conferma che ordinamento e raggruppamento funzionino anche visti in UTC.
  • Contrasto non-DST: ripeti una conversione in un fuso che non usa DST e conferma che i risultati rimangono stabili nelle stesse date.
  • Snapshot dei report: salva totali attesi per i report attorno alla fine del mese e al weekend DST e confronta l'output dopo ogni modifica.

Uno scenario concreto

Immagina che il team di supporto pianifichi un follow-up alle “01:30” nella notte della ripetizione autunnale. Se l'interfaccia salva solo l'ora locale mostrata, non puoi sapere quale “01:30” intendessero. Un buon test crea entrambi i timestamp UTC che mappano su 01:30 localmente e conferma che l'app li mantiene distinti.

Questi test mostrano rapidamente se il sistema sta salvando i fatti giusti (istantanea UTC, ID fuso, e talvolta l'ora locale originale) e se i report restano onesti quando gli orologi cambiano.

Checklist rapida prima di rilasciare

Tame DST edge cases
Handle missing and repeated times with clear choices at input, not surprises later.
Try It

I bug dell'ora legale sfuggono perché l'app sembra corretta la maggior parte dei giorni. Usa questa checklist prima di rilasciare qualcosa che mostra tempo, filtra per data o esporta report.

  • Scegli un fuso di reporting per ogni report (per esempio “fuso HQ aziendale” o “fuso utente”). Mostralo nell'intestazione del report e mantienilo coerente su tabelle, totali e grafici.
  • Memorizza ogni “momento nel tempo” come UTC (created_at, paid_at, message_sent_at). Memorizza l'ID fuso IANA quando serve il contesto.
  • Non calcolare usando offset fissi come “UTC-5” se può applicarsi DST. Converti usando le regole del fuso per quella data.
  • Etichetta gli orari chiaramente ovunque (UI, email, esportazioni). Includi data, ora e fuso così screenshot e CSV non vengano interpretati male.
  • Tieni un piccolo set di test DST: un timestamp subito prima del salto primaverile, uno subito dopo e lo stesso attorno all'ora ripetuta autunnale.

Un check di realtà: se un manager del supporto a New York esporta “Ticket creati domenica” e un collega a Londra apre il file, entrambi dovrebbero essere in grado di dire quale fuso orario rappresentano i timestamp senza indovinare.

Esempio: un workflow reale di supporto attraverso fusi diversi

Add time you can prove
Create an audit trail with stored UTC, zone ID, and original input for disputed timestamps.
Get Started

Un cliente a New York apre un ticket di supporto nella settimana in cui gli USA sono già passati all'ora legale ma il Regno Unito no. Il team di supporto è a Londra.

Il 12 marzo il cliente invia il ticket alle 09:30 ora locale New York. Quel momento è 13:30 UTC, perché New York è ora UTC-4. Un agente a Londra risponde alle 14:10 ora di Londra, che è 14:10 UTC (Londra è ancora UTC+0 quella settimana). La risposta è arrivata 40 minuti dopo la creazione del ticket.

Ecco come va storto se salvi solo l'ora locale senza ID fuso:

  • Salvi “09:30” e “14:10” come timestamp semplici.
  • Un job di report più tardi assume “New York è sempre UTC-5” (o usa il fuso del server).
  • Converte 09:30 come 14:30 UTC, non 13:30 UTC.
  • Il conteggio SLA è sbagliato di 1 ora e un ticket che rispettava una SLA di 2 ore può risultare in ritardo.

Il modello più sicuro mantiene UI e reporting coerenti. Memorizza il tempo evento come timestamp UTC e salva l'ID fuso IANA rilevante (per esempio America/New_York per il cliente, Europe/London per l'agente). Nell'interfaccia, mostra lo stesso momento UTC nel fuso del visualizzatore usando le regole salvate per quella data.

Per il report settimanale, scegli una regola chiara come “raggruppa per giorno locale del cliente.” Calcola i confini di giorno in America/New_York (da mezzanotte a mezzanotte), converti quei confini in UTC, poi conta i ticket al loro interno. I numeri restano stabili anche nelle settimane con DST.

Prossimi passi: rendere coerente la gestione del tempo in tutta l'app

Se il tuo prodotto è stato colpito dai bug DST, il modo più rapido per uscire è scrivere poche regole e applicarle ovunque. “Quasi coerente” è dove vivono i problemi temporali.

Tieni le regole corte e specifiche:

  • Formato di memorizzazione: cosa memorizzi (di solito un istante in UTC) e cosa non memorizzi mai (ora locale ambigua senza fuso).
  • Fuso di report: quale fuso usano i report per default e come gli utenti possono cambiarlo.
  • Etichettatura UI: cosa appare accanto agli orari (per esempio, “10 mar, 09:00 (America/New_York)” vs solo “09:00”).
  • Regole di arrotondamento: come bucketti tempo (ora, giorno, settimana) e quale fuso seguono quei bucket.
  • Campi di audit: quali timestamp significano “evento avvenuto” vs “record creato/aggiornato”.

Rilascia in modo a basso rischio. Correggi prima i nuovi record così il problema smette di crescere. Poi migra i dati storici a lotti. Durante la migrazione, conserva sia il valore originale (se ce l'hai) sia il valore normalizzato abbastanza a lungo da individuare differenze nei report.

Se usi AppMaster (appmaster.io), un vantaggio pratico è centralizzare queste regole nel modello dati e nella business logic condivisa: memorizza timestamp UTC in modo coerente, conserva gli ID fuso IANA accanto ai record che necessitano di significato locale e applica le conversioni ai confini di input e visualizzazione.

Un passo pratico successivo è costruire un report sicuro per i fusi (per esempio “ticket risolti per giorno”) e convalidarlo usando i test sopra. Se resta corretto durante una settimana di cambio DST per due fusi diversi, sei in buona forma.

FAQ

Why do DST bugs happen even when the code looks correct?

Daylight saving time cambia l'offset dell'orologio locale, non il momento reale in cui è avvenuto un evento. Se tratti una lettura dell'orologio locale come se fosse un istante assoluto, vedrai orari “mancanti” in primavera e orari “duplicati” in autunno.

What’s the safest way to store timestamps in a database?

Memorizza gli eventi reali come un istante assoluto in UTC, così il valore non salta quando cambiano gli offset. Converti nel fuso orario del visualizzatore solo al momento della visualizzazione, usando un vero identificatore di fuso orario.

Why can’t I store just a UTC offset instead of a time zone name?

Un offset come -05:00 descrive solo la differenza da UTC in un momento specifico e non include le regole DST o la storia. Un fuso IANA come America/New_York contiene l'insieme completo di regole, così le conversioni restano corrette per date diverse.

When should I store a value as a date instead of a timestamp?

Memorizza come date i valori che non sono istanti reali, come compleanni, scadenze di fatture o "si rinnova il giorno 5". Se li memorizzi come timestamp, le conversioni di fuso orario possono spostarli al giorno prima o dopo.

How should my app handle times that are skipped or repeated during DST switches?

La “primavera” crea orari locali che non esistono: l'app dovrebbe bloccare selezioni invalide e offrire l'orario valido successivo. La “caduta” crea un'ora ripetuta: l'interfaccia deve permettere all'utente di scegliere quale istanza intende, tipicamente mostrando l'offset.

Should I convert scheduled meetings to UTC when saving them?

Per la pianificazione, conserva l'intenzione locale (data e ora locali) più l'identificatore di fuso orario, perché quello è ciò che l'utente intende. Puoi anche memorizzare un istante UTC derivato per l'esecuzione, ma non eliminare l'intento locale originale o perderai il significato se le regole cambiano.

How do I stop reports from showing different daily totals for different users?

Scegli un fuso orario di reporting per ogni report e rendilo visibile, così tutti sanno cosa significa “giorno”. Raggruppare per giorno locale può produrre giornate da 23 o 25 ore vicino ai cambi DST: è accettabile purché il report dichiari il fuso scelto e lo applichi in modo coerente.

What’s the most common mistake that causes the “one-hour shift” bug?

La regola pratica è: effettua le conversioni solo ai bordi dell'applicazione — parse all'input una sola volta, scrivi una sola volta, formatta una sola volta per la visualizzazione. La doppia conversione avviene quando uno strato assume che un timestamp sia locale e un altro che sia UTC, causando shift di un'ora che appaiono solo in alcune date.

How should I calculate durations across DST changes?

Memorizza il tempo trascorso in secondi (o un'altra unità assoluta) e somma quei valori, poi formatta il risultato per la visualizzazione. Decidi se intendi tempo trascorso o ore di orologio prima di implementare paghe, SLA o turni, perché le notti con DST possono far sembrare le ore di orologio più lunghe o più corte.

What tests catch most DST bugs before customers do?

Testa entrambi i giorni di transizione DST in almeno un fuso che osserva DST e confronta con un fuso che non lo osserva per individuare assunzioni errate. Includi casi per l'ora mancante, l'ora ripetuta, eventi vicino alla mezzanotte e il raggruppamento dei report, perché è lì che di solito si nascondono i bug temporali.

Facile da avviare
Creare qualcosa di straordinario

Sperimenta con AppMaster con un piano gratuito.
Quando sarai pronto potrai scegliere l'abbonamento appropriato.

Iniziare