Ce face time.LoadLocation
time.LoadLocation("Europe/Bucharest") încarcă fusul orar cu acel nume din baza de date IANA a sistemului de operare. Un fus încărcat așa știe toate regulile: ora de vară (EEST, UTC+3) și de iarnă (EET, UTC+2) și schimbările istorice. Numele speciale "UTC" și "Local" returnează time.UTC și time.Local. Pe sisteme fără baza de fusuri (containere minimale, Windows fără Go instalat), adaugă import _ "time/tzdata", care include baza în program (aproximativ 450 KB).
time.LoadLocationFromTZData(nume, date) creează fusul din conținutul unui fișier în formatul IANA (de exemplu /usr/share/zoneinfo/Europe/Bucharest sau /etc/localtime), când ai datele din altă sursă.
time.FixedZone("EEST", 3*3600) creează o zonă cu decalaj fix față de UTC, în secunde, fără ore de vară. E potrivită când primești un decalaj explicit (de exemplu +03:00 dintr-un API), dar nu pentru a reprezenta România tot anul.
Parametri
| Parametru | Descriere |
|---|---|
name |
Numele IANA al zonei ("Europe/Bucharest", "America/New_York") sau numele afișat al zonei fixe. |
data |
Conținutul unui fișier de fus orar IANA (doar la FromTZData). |
offset |
Decalajul față de UTC, în secunde (doar la FixedZone). |
Ce returnează
Un *time.Location; LoadLocation și LoadLocationFromTZData returnează și o eroare.
Exemple
Exemplul 1: Ora de vară și de iarnă la București
În 2026, România trece la ora de iarnă pe 25 octombrie, la 04:00.
package main
import (
"fmt"
"time"
)
func main() {
buc, err := time.LoadLocation("Europe/Bucharest")
if err != nil {
fmt.Println("eroare:", err)
return
}
for _, zi := range []int{24, 25, 26} {
t := time.Date(2026, time.October, zi, 12, 0, 0, 0, buc)
nume, decalaj := t.Zone()
fmt.Printf("%s %s UTC%+d\n", t.Format("02.01.2006 15:04"), nume, decalaj/3600)
}
_, err = time.LoadLocation("Europe/Iasi")
fmt.Println("Zonă inexistentă:", err)
utc, _ := time.LoadLocation("UTC")
fmt.Println("UTC este time.UTC:", utc == time.UTC)
}
Rezultat
24.10.2026 12:00 EEST UTC+3
25.10.2026 12:00 EET UTC+2
26.10.2026 12:00 EET UTC+2
Zonă inexistentă: unknown time zone Europe/Iasi
UTC este time.UTC: true
Exemplul 2: FixedZone: decalaj fix, fără oră de vară
O zonă fixă „EET” dă ora corectă iarna, dar greșită vara; zona încărcată cu LoadLocation le dă corect pe amândouă.
package main
import (
"fmt"
"time"
)
func main() {
fix := time.FixedZone("EET", 2*3600)
buc, err := time.LoadLocation("Europe/Bucharest")
if err != nil {
fmt.Println(err)
return
}
for _, t := range []time.Time{
time.Date(2026, time.January, 15, 10, 0, 0, 0, time.UTC),
time.Date(2026, time.July, 15, 10, 0, 0, 0, time.UTC),
} {
fmt.Printf("%s UTC -> fixă: %s | București: %s\n",
t.Format("02.01 15:04"), t.In(fix).Format("15:04 MST"), t.In(buc).Format("15:04 MST"))
}
dinAPI := time.FixedZone("", -5*3600) // „-05:00” primit de la un API
fmt.Println(time.Date(2026, 10, 19, 8, 0, 0, 0, dinAPI))
}
Rezultat
15.01 10:00 UTC -> fixă: 12:00 EET | București: 12:00 EET
15.07 10:00 UTC -> fixă: 12:00 EET | București: 13:00 EEST
2026-10-19 08:00:00 -0500 -0500
Exemplul 3: Fus orar din datele unui fișier IANA
Citim fișierul de fus orar al sistemului (calea obișnuită pe Linux și macOS) și creăm zona din conținutul lui.
package main
import (
"fmt"
"os"
"time"
)
func main() {
date, err := os.ReadFile("/usr/share/zoneinfo/Europe/Bucharest")
if err != nil {
fmt.Println("fișierul nu există pe acest sistem:", err)
return
}
loc, err := time.LoadLocationFromTZData("Europe/Bucharest", date)
if err != nil {
fmt.Println(err)
return
}
t := time.Date(2026, 10, 19, 9, 0, 0, 0, time.UTC)
fmt.Println(loc, "->", t.In(loc).Format("15:04 MST"))
_, err = time.LoadLocationFromTZData("gresit", []byte("nu sunt date de fus orar"))
fmt.Println("Date invalide:", err)
}
Rezultat
Europe/Bucharest -> 12:00 EEST
Date invalide: malformed time zone information
Greșeli frecvente
- Ignori eroarea de la
LoadLocation: pe un server fără baza de fusuri primeștinil, iart.In(nil)se oprește cu panică. Verifică eroarea sau importătime/tzdata. - Folosești
FixedZone("EET", 2*3600)pentru România: vara orele sunt greșite cu o oră. - Încarci zona la fiecare cerere:
LoadLocationcitește fișiere de pe disc. Încarc-o o dată, la pornire.
Comenzi înrudite
time.Time.In: Afișează același moment în alt fus orar: In(loc) pentru o zonă anume, UTC() pentru UTC, Local() pentru zona calculatorului.time.Date: Construiește un moment din an, lună, zi, oră, minut, secundă, nanosecundă și fus orar; normalizează valorile prea mari.time.Parse: Citește o dată din text după un model (2006-01-02 15:04); ParseInLocation o interpretează într-un fus orar dat.time.Time: Tipul care ține un moment în timp: dată, oră, nanosecunde și fusul orar. Se creează cu time.Date sau time.Now.