Fusi orari
Lavorare con le località
Fusi orari è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Ogni valore temporale ha un fuso orario
Ogni time.Time ha un fuso orario associato. Lo stesso istante può essere visualizzato in modo diverso a seconda del fuso.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.Location())
}UTC e locale
Due fusi orari integrati sono sempre disponibili:
time.UTCper il Tempo coordinato universale.time.Localper il fuso orario locale della macchina.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.UTC().Hour())
}Caricamento di un fuso denominato
time.LoadLocation(name) cerca un fuso IANA come "Europe/Istanbul" o "America/New_York".
package main
import (
"fmt"
"time"
)
func main() {
loc, err := time.LoadLocation("UTC")
fmt.Println(loc, err)
}Conversione dei fusi con In
t.In(loc) restituisce lo stesso istante visualizzato in un fuso diverso. L'istante sottostante non cambia: cambia solo il modo in cui viene presentato.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.In(time.UTC).Hour())
}Stesso istante, orologi diversi
Mezzogiorno UTC è un unico istante, ma chi si trova in un altro fuso vede un'ora diversa sul proprio orologio. La differenza restituita da Sub tra i due valori è zero.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
u := t.UTC()
fmt.Println(t.Sub(u))
}Creazione di un valore temporale in un fuso
Passi un fuso orario come ultimo argomento di time.Date per creare direttamente un valore temporale in quel fuso.
package main
import (
"fmt"
"time"
)
func main() {
loc, _ := time.LoadLocation("UTC")
t := time.Date(2026, 5, 30, 9, 0, 0, 0, loc)
fmt.Println(t.Hour())
}Lettura dell'offset del fuso
t.Zone() restituisce l'abbreviazione del fuso e il relativo offset rispetto a UTC, espresso in secondi.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
name, offset := t.Zone()
fmt.Println(name, offset)
}Fusi a offset fisso
Quando non servono tutte le regole IANA, time.FixedZone(name, offsetSeconds) crea un fuso semplice con offset costante.
package main
import (
"fmt"
"time"
)
func main() {
loc := time.FixedZone("GMT+3", 3*3600)
t := time.Date(2026, 5, 30, 12, 0, 0, 0, loc)
name, off := t.Zone()
fmt.Println(name, off)
}Formattazione tra fusi
Converta con In prima di formattare, per visualizzare un timestamp nel fuso del lettore.
package main
import (
"fmt"
"time"
)
func main() {
loc := time.FixedZone("GMT+3", 3*3600)
t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
fmt.Println(t.In(loc).Format("15:04 MST"))
}Memorizzare in UTC, visualizzare in locale
Una regola molto diffusa è: memorizzi ed esegua i calcoli in UTC, quindi converta in un fuso locale solo quando mostra gli orari agli utenti. In questo modo evita ambiguità.
package main
import (
"fmt"
"time"
)
func main() {
stored := time.Date(2026, 5, 30, 9, 0, 0, 0, time.UTC)
loc := time.FixedZone("GMT+2", 2*3600)
fmt.Println("shown:", stored.In(loc).Hour())
}Gestione degli errori di caricamento
LoadLocation può non riuscire se il database dei fusi è mancante o il nome è sconosciuto. Controlli sempre l'errore.
package main
import (
"fmt"
"time"
)
func main() {
_, err := time.LoadLocation("Mars/Olympus")
if err != nil {
fmt.Println("unknown zone")
}
}Verifica rapida
Che cosa cambia t.In(loc)?
Riepilogo: fusi orari
Ha imparato a lavorare con i fusi orari:
- Ogni valore temporale ha un fuso orario;
UTCeLocalsono integrati. - Carichi i fusi denominati con
LoadLocationoppure crei offset conFixedZone. - Converta con
In; memorizzi in UTC e visualizzi in locale.
package main
import (
"fmt"
"time"
)
func main() {
t := time.Date(2026, 5, 30, 15, 0, 0, 0, time.UTC)
loc := time.FixedZone("GMT-5", -5*3600)
fmt.Println(t.In(loc).Format("15:04 MST"))
}Domande Frequenti
La lezione «Fusi orari» è gratuita?
Sì — il testo completo di «Fusi orari» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Fusi orari»?
Lavorare con le località Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Fusi orari»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.