Italiano

Strumenti per sviluppatori · Convertitore di timestamp Unix

I fusi orari non sono differenziati: il database IANA tz e perché è importante

· Sfondo

timestamp fusi orari API del browser

Un percorso con zona denominata che produce offset diversi per due istanti
Illustrazione vettoriale originale ToolAcre

Un offset è un numero; un fuso orario è una storia di numeri e le regole per quando cambiano. Questo post spiega la differenza, introduce il database IANA tz che lo codifica e mostra perché i convertitori si affidano ad esso per la lettura locale.

La riunione spostata di un'ora: un offset memorizzato di +02:00 corretto a luglio e sbagliato a dicembre

Un `+02:00` fisso salvato accanto a una riunione di luglio può essere una lettura fedele per quell'istante e di norma fallisce per dicembre. L'offset è un risultato; la zona è il contesto della regola in grado di produrre risultati in date diverse. Memorizzandone uno come se fosse l'altro si blocca un'istantanea.

La riga locale di ToolAcre chiede a Intl di formattare ciascuna data e richiede un breve offset numerico. Non aggiunge una costante di configurazione all'epoca. Questo design consente alle regole applicabili dell’ambiente di influenzare ogni istante separatamente.

Offset rispetto a zona: una distanza fissa da UTC rispetto a una regione denominata con regole DST e una cronologia delle modifiche

Un offset indica la distanza di un orologio renderizzato da UTC in un istante. Una regione denominata può contenere una sequenza di regole di compensazione e cambiamenti storici. L'epoca stessa non porta né l'uno né l'altro. Questi concetti dovrebbero occupare campi separati quando un'applicazione necessita sia di un evento che di una pianificazione basata sul luogo.

Per un evento immutabile può essere sufficiente memorizzare l’istante. Per "aperto alle 09:00 in questa regione ogni giorno", mantieni la zona denominata perché le istanze future dovranno essere risolte dal wall time. Il riutilizzo dell'offset di ieri considera una regola dinamica come una proprietà numerica permanente.

Il database IANA tz - Area/City nomina, perché è un registro di decisioni politiche e quanto spesso viene aggiornato

La cartella di lavoro denominata database IANA, provenienza politica e frequenza di aggiornamento. L'implementazione segnala un nome di zona in stile IANA da `resolvedOptions()` ma non espone una versione del database, una pianificazione degli aggiornamenti o un pacchetto di origine. Questi dettagli non vengono affermati qui.

Questa limitazione influisce sulla riproduzione. Se l'output della vecchia data differisce tra le macchine, registrare la stringa di zona e le versioni della piattaforma; non affermare quale set di regole sia più recente solo in base all'orologio. Una zona denominata migliora la domanda, ma il convertitore non è un ispettore dei dati del fuso orario.

Le applicazioni che necessitano di output storico riproducibile dovrebbero controllare la dipendenza dai dati di zona e testare le date rappresentative. Affidarsi a un ambiente browser non specificato delega tale riproducibilità.

La provenienza delle regole della zona denominata e la cadenza degli aggiornamenti non vengono esposte da questa implementazione

ToolAcre chiede al browser la sua zona locale e i formati tramite Intl. Il repository non stabilisce se le regole provengono dal sistema operativo, dal bundle del browser o da un altro componente runtime. Rileva i fallimenti e torna indietro in modo sicuro anziché esporre l'architettura interna.

Di conseguenza, per “locale” si intende l'ambiente selezionato dal browser al momento della conversione. La modifica delle impostazioni del dispositivo può modificare l'output senza modificare l'epoca. Per gli audit trail, conserva UTC e il conteggio non elaborato; utilizzare la visualizzazione locale come contesto anziché l'archiviazione canonica.

Il fallback a ISO in caso di errore del formattatore conserva un istante ma perde la presentazione locale richiesta. I consumatori dovrebbero considerarlo come un contesto di visualizzazione ridotto, non come una data modificata.

Il browser seleziona e formatta la sua zona locale; la fonte delle sue regole non è affermata

Scegli due istanti UTC a distanza di sei mesi, ad esempio `2025-01-15T12:00:00Z` e `2025-07-15T12:00:00Z`, convertili in secondi e controlla le righe locali su un dispositivo. Registrare se l'offset numerico differisce. L'osservazione è valida per la zona e l'ambiente visualizzati.

La cartella di lavoro prescriveva gli offset Europe/Berlin, ma le regole della zona denominata non venivano lette dall'implementazione. Questo esercizio riproducibile evita una tabella non supportata mentre insegna la stessa distinzione: una query di zona, due istanti e potenzialmente due risultati di offset.

Se gli scostamenti corrispondono, l'osservazione è comunque informativa: quella zona configurata non ha esposto una differenza stagionale negli istanti scelti in quell'ambiente.

Esempio pratico: osservare una zona del browser in due date invece di codificare le regole di Berlino

Il pannello richiede `timeZoneName: "shortOffset"`, che privilegia una relazione numerica come GMT+1 rispetto a un'abbreviazione regionale. Questa scelta riduce la dipendenza dalle etichette il cui significato può variare in base al contesto, sebbene la formattazione Intl esatta rimanga l'output della piattaforma.

Per i dati archiviati, utilizzare identificatori di zona canonici definiti dalla libreria scelta dell'applicazione anziché visualizzare abbreviazioni. Una breve etichetta rivolta all'utente può essere utile, ma non dovrebbe diventare la chiave per ricostruire un programma futuro.

Gli offset numerici rimangono inequivocabili come aritmetici in un istante. Il loro limite è la mancanza dell'identità della regola, non l'incapacità di mappare la lettura dell'orologio su UTC.

Le abbreviazioni vengono evitate nei dati memorizzati; il formattatore richiede un breve offset numerico

La pianificazione futura ricorrente richiede lacune, sovrapposizioni e gestione delle politiche che questo convertitore non fornisce. Inizia con una data o un'epoca risolta e la visualizza. Non sceglie tra due tempi locali ripetuti né ne ripara uno inesistente.

Utilizza una libreria di pianificazione con riconoscimento della zona il cui comportamento è testato per i tuoi requisiti, quindi controlla qui le occorrenze risolte, se utile. Separare la risoluzione dal display evita che un semplice convertitore diventi uno scheduler accidentale con una politica edge indefinita.

L’output dello scheduler può quindi essere memorizzato come un’epoca per l’esecuzione mantenendo la zona e l’intento wall-time originale per futuri ricalcoli o spiegazioni.

Conclusione: memorizza gli istanti come epoche, memorizza i luoghi come nomi di zone e come il convertitore di timestamp Unix utilizza la zona del tuo browser per la lettura locale

Memorizza gli istanti come unità di epoca esplicite o stringhe UTC canoniche e memorizza zone con nome quando il luogo stesso è importante. Un offset può accompagnare un output a scopo esplicativo, ma non sostituisce nessuno dei due campi. Le righe UTC e locali di ToolAcre dimostrano tale separazione.

Quando un risultato locale ti sorprende, controlla l'etichetta della zona, l'istante e l'offset prima di modificare i dati. Una patch con offset fisso può far sembrare corretta una data e sbagliata un'altra. Il modello duraturo mantiene stabile l'evento e consente a una regola di zona verificata di fornire il quadrante dell'orologio.

Questo modello supporta anche i viaggi: un utente può visualizzare un istante memorizzato in una nuova zona locale senza riscrivere l'evento o perdere il contesto di pianificazione originale.