I fusi orari sono fondamentali per qualsiasi applicazione che si occupa di date e orari. Naturalmente, questo è particolarmente vero per le app che servono utenti in continenti e località. I fusi orari determinano l'offset dal Coordinated Universal Time (UTC) per località specifiche in tutto il mondo. Svolgono un ruolo fondamentale nel garantire una gestione del tempo accurata e affidabile.
Go fornisce il pacchetto orario nella sua libreria standard per lavorare con l'ora e i fusi orari. Puoi recuperare e convertire i fusi orari in varie località utilizzando il pacchetto orario.
Il Pacchetto Tempo
IL tempo pacchetto fornisce funzionalità per lavorando con orari e date, misurare e visualizzare il tempo e manipolare le date utilizzando un calendario gregoriano senza secondi intercalari.
Il pacchetto tempo prevede a
Tempotipo struct contenente il campo della posizione che puoi utilizzare per impostare i fusi orari.È possibile importare il pacchetto orario con un'istruzione di importazione.
importare"tempo"
Ecco il tipo di struttura temporale e i suoi campi. I campi non sono esportati, quindi sono assenti dalla documentazione ufficiale.
pacchetto principale
tipo Tempo struct {
// wall è il wall time nel formato restituito da runtime.nanotime()
// funzione.
parete uint64// ext è la lettura dell'orologio monotono nel formato restituito da
// runtime.nanotime().
est int64// loc è un puntatore alla struttura Location associata a questo orario.
loc *Posizione
}tipo Posizione struct {
// nome è il nome del fuso orario, ad esempio "UTC" o "PST".
nome corda// zone contiene informazioni sull'abbreviazione del fuso orario, offset,
// e regola per un singolo fuso orario nella località.
zona []zona// tx contiene informazioni su quando l'abbreviazione del fuso orario o
// compensa le modifiche per una posizione.
tx []zoneTrans// extend contiene il nome di un fuso orario genitore se this location
// si estende da un altro.
estendere corda// cacheStart e cacheEnd sono timestamp Unix che definiscono l'intervallo
// per cui è valido il campo cacheZone.
cacheStart int64
cacheEnd int64
// cacheZone punta alla zona attualmente valida per l'ora
// intervallo definito da cacheStart e cacheEnd.
cacheZone *zona
}
Molti metodi utilizzano il tempo e Posizione struct, inclusi i metodi del fuso orario.
Caricamento delle informazioni sul fuso orario
Il caricamento delle informazioni sul fuso orario è una delle operazioni di base quando si lavora con i fusi orari. IL CaricaLocazione Il metodo fornisce funzionalità per il caricamento delle informazioni sul fuso orario dal file Database dei fusi orari IANA. IL CaricaLocazione Il metodo accetta il nome del fuso orario e restituisce le informazioni sulla posizione e un errore per la gestione. Dopo aver caricato le informazioni sul fuso orario, crea un file tempo struct associata al fuso orario.
importare (
"fmt"
"tempo"
)funzprincipale() {
// Carica la posizione del fuso orario per America/New_York
loc, err := tempo. CaricaPosizione("America/New_York")Se errare!= zero {
fmt. Stampaln("Errore durante il caricamento della posizione:", ehm)
ritorno
}
// Ottieni l'ora corrente in una posizione
ora := tempo. Adesso().In (loc)
fmt. Stampaln("Ora attuale a New York:", Ora)
}
IL In metodo del Ora funzione prende in una posizione e stampa l'ora lì:
Inoltre, puoi utilizzare il Zona fissa metodo per caricare l'ora corrente in una posizione se si conosce la stringa della posizione e l'offset del fuso orario dall'ora UTC. Innanzitutto, dovrai caricare l'ora corrente in UTC, quindi utilizzerai il metodo FixedZone per caricare il posizione in base alla stringa e all'offset prima di passare la posizione al metodo In the time esempio.
importare (
"fmt"
"tempo"
)funzprincipale() {
// Ottieni l'ora corrente in UTC
ora := tempo. Adesso().UTC()// Imposta il fuso orario per Lagos
lagos := ora. In tempo. Zona fissa("WAT", 3600))
// Stampa l'ora corrente in entrambe le posizioni
fmt. Stampaln("Ora attuale a Lagos:", lago)
}
IL principale la funzione stampa l'ora corrente a Lagos sulla console.
Misurazione della durata del fuso orario
Il pacchetto tempo fornisce il Zona metodo per recuperare l'abbreviazione e l'offset del fuso orario associato a a tempo. Tempo valore. Il metodo Zone restituisce la stringa che rappresenta l'abbreviazione del fuso orario (ad es. "EST" per "America/New_York") e un numero intero che rappresenta il numero di secondi a est dell'UTC.
importare (
"fmt"
"tempo"
)funzprincipale() {
// Carica la posizione del fuso orario per America/New_York
loc, err := tempo. CaricaPosizione("America/New_York")Se errare!= zero {
fmt. Stampaln("Errore durante il caricamento della posizione:", ehm)
ritorno
}// Ottieni l'ora corrente in UTC e la posizione specificata
t1 := tempo. Ora()
t2 := t1.In (loc)// Ottieni l'offset in secondi per ogni fuso orario
//per i fusi orari
_, offset1 := t1.Zona()
_, offset2 := t2.Zona()// Calcola la durata del cambio di fuso orario
// tra UTC e America/New_York
durata := offset2 - offset1
fmt. Stampaf("La durata del cambio di fuso orario" +
" tra UTC e New York è: %d secondi", durata)
}
Nella funzione principale, il metodo Zone misura la durata dello spostamento del fuso orario tra due fusi orari (time. valori temporali). IL t1 variabile è l'ora corrente in UTC e il t2 variabile è l'ora corrente nel fuso orario "America/New_York".
La funzione stampa il file durata variabile (la differenza di offset tra i fusi orari) che rappresenta lo spostamento del fuso orario in secondi.
Valutazione del tempo tra i fusi orari
Puoi valutare il tempo tra i fusi orari se conosci la durata tra i fusi orari. Puoi usare il Aggiungere metodo del metodo In del tuo tempo. Istanza Time struct per aggiungere una durata all'ora in un fuso orario.
importare (
"tronco d'albero"
"tempo"// importa il pacchetto orario
)funzvalutare il tempo(tempo t. Tempo, tempo di durata. Durata)tempo.Tempo {
// carica la posizione per Africa/Lagos
posizione, err := tempo. CaricaPosizione("Africa/Lago")
Se errare!= zero {
tronco d'albero. Stampaln("Si è verificato un errore durante il caricamento della posizione")
}
ritorno T. In (località).Aggiungi (durata)
}
IL valutare il tempo la funzione richiede un tempo. Istanza temporale e una durata di tipo tempo. Durata, restituendo l'ora nel fuso orario. Carica l'ora corrente in "Africa/Lagos" e aggiunge una durata all'ora.
Manipola ora e data con il pacchetto Time
Il pacchetto orario è molto versatile per lavorare con orari e date. Il pacchetto time fornisce funzioni come Unix() per convertire il tempo in tempo Unix, Sleep() per mettere in pausa le goroutine e Format() per formattare i valori del tempo in stringhe.