Časovni pasovi so ključni za vsako aplikacijo, ki se ukvarja z datumi in uro. Seveda to še posebej velja za aplikacije, ki služijo uporabnikom po celinah in lokacijah. Časovni pasovi določajo odmik od univerzalnega koordiniranega časa (UTC) za določene lokacije po svetu. Imajo ključno vlogo pri zagotavljanju natančnega in zanesljivega ravnanja s časom.
Go nudi časovni paket v svoji standardni knjižnici za delo s časom in časovnimi pasovi. S časovnim paketom lahko pridobite in pretvorite časovne pasove na različnih lokacijah.
Časovni paket
The čas paket zagotavlja funkcionalnost za delo s časi in datumi, merjenje in prikazovanje časa ter urejanje datumov po gregorijanskem koledarju brez prestopnih sekund.
Časovni paket zagotavlja a Časvrsta strukture ki vsebuje polje lokacije, ki ga lahko uporabite za nastavitev časovnih pasov.
Časovni paket lahko uvozite z uvoznim stavkom.
uvoz"čas"
Tukaj je tip časovne strukture in njena polja. Polja niso izvožena, zato jih ni v uradni dokumentaciji.
paket glavni
vrsta Čas struct {
// zid je čas zidu v formatu, ki ga vrne runtime.nanotime()
// funkcija.
zid uint64// ext je monotono branje ure v formatu, ki ga vrne
// runtime.nanotime().
ext int64// loc je kazalec na strukturo Location, povezano s tem časom.
loc *Lokacija
}vrsta Lokacija struct {
// ime je ime časovnega pasu, na primer "UTC" ali "PST".
ime vrvica// cona vsebuje informacije o kratici časovnega pasu, odmiku,
// in pravilo za posamezen časovni pas na lokaciji.
cona [] cona// tx vsebuje informacijo o tem, kdaj je okrajšava časovnega pasu oz
// izravnava sprememb za lokacijo.
tx []zoneTrans// razširitev vsebuje ime nadrejenega časovnega pasu, če je ta lokacija
// sega od drugega.
razširiti vrvica// cacheStart in cacheEnd sta časovna žiga Unixa, ki deinirata obseg
// za katero velja polje cacheZone.
cacheStart int64
cacheEnd int64
// cacheZone kaže na območje, ki je trenutno veljavno za ta čas
// obseg, ki ga določata cacheStart in cacheEnd.
cacheZone *območje
}
Številne metode uporabljajo čas in Lokacija strukture, vključno z metodami časovnega pasu.
Nalaganje informacij o časovnem pasu
Nalaganje informacij o časovnem pasu je ena od osnovnih operacij pri delu s časovnimi pasovi. The LoadLocation ponuja funkcionalnost za nalaganje informacij o časovnem pasu iz Podatkovna baza časovnih pasov IANA. The LoadLocation metoda prevzame ime časovnega pasu in vrne podatke o lokaciji ter napako za obdelavo. Ko naloži informacije o časovnem pasu, ustvari a čas primerek strukture, povezan s časovnim pasom.
uvoz (
"fmt"
"čas"
)funkglavni() {
// Naloži lokacijo časovnega pasu za Ameriko/New_York
loc, err := čas. LoadLocation("Amerika/New_York")če napaka!= nič {
fmt. Println("Napaka pri nalaganju lokacije:", napaka)
vrnitev
}
// Pridobite trenutni čas na lokaciji
zdaj := čas. Now().In (loc)
fmt. Println("Trenutni čas v New Yorku:", zdaj)
}
The notri metoda zdaj funkcija zavzame lokacijo in tam natisne čas:
Poleg tega lahko uporabite FixedZone način za nalaganje trenutnega časa na lokaciji, če poznate lokacijski niz in odmik časovnega pasu od UTC. Najprej boste morali naložiti trenutni čas v UTC, nato pa boste z metodo FixedZone naložili lokacija na podlagi niza in odmika, preden lokacijo posreduje metodi časa primerek.
uvoz (
"fmt"
"čas"
)funkglavni() {
// Pridobite trenutni čas v UTC
zdaj := čas. Zdaj().UTC()// Nastavite časovni pas za Lagos
lagos := zdaj. Pravočasno. FixedZone("WAT", 3600))
// Izpis trenutnega časa na obeh lokacijah
fmt. Println("Trenutni čas v Lagosu:", lagos)
}
The glavni funkcija natisne trenutni čas v Lagosu na konzolo.
Merjenje trajanja časovnega pasu
Časovni paket zagotavlja Cona metoda za pridobivanje okrajšave in odmika časovnega pasu, povezanega z a čas. Čas vrednost. Metoda Zone vrne niz, ki predstavlja okrajšavo časovnega pasu (npr. »EST« za »America/New_York«) in celo število, ki predstavlja število sekund vzhodno od UTC.
uvoz (
"fmt"
"čas"
)funkglavni() {
// Naloži lokacijo časovnega pasu za Ameriko/New_York
loc, err := čas. LoadLocation("Amerika/New_York")če napaka!= nič {
fmt. Println("Napaka pri nalaganju lokacije:", napaka)
vrnitev
}// Pridobite trenutni čas v UTC in podano lokacijo
t1 := čas. zdaj()
t2 := t1.In (loc)// Pridobite odmik v sekundah za vsak časovni pas
//za časovne pasove
_, offset1 := t1.Zone()
_, offset2 := t2.Zone()// Izračunajte trajanje premika časovnega pasu
// med UTC in Ameriko/New_Yorkom
trajanje := odmik2 - odmik1
fmt. Printf("Trajanje premika časovnega pasu" +
" med UTC in New Yorkom je: %d sekund", trajanje)
}
V glavni funkciji metoda Zone meri trajanje premika časovnega pasu med dvema časovnima pasovoma (čas. Časovne vrednosti). The t1 spremenljivka je trenutni čas v UTC, in t2 spremenljivka je trenutni čas v časovnem pasu "America/New_York".
Funkcija natisne trajanje spremenljivka (razlika v odmiku med časovnimi pasovi), ki predstavlja premik časovnega pasu v sekundah.
Vrednotenje časa med časovnimi pasovi
Čas med časovnimi pasovi lahko ocenite, če poznate trajanje med časovnima pasovoma. Lahko uporabite Dodaj metoda In metode svojega časa. Primerek časovne strukture za dodajanje trajanja času v časovnem pasu.
uvoz (
"dnevnik"
"čas"// uvozi časovni paket
)funkevaluateTime(t čas. Čas, čas trajanja. Trajanje)čas.Čas {
// naloži lokacijo za Afriko/Lagos
lokacija, napaka := čas. LoadLocation("Afrika/Lagos")
če napaka!= nič {
dnevnik. Println("Pri nalaganju lokacije je prišlo do napake")
}
vrnitev t. V (lokacija). Dodaj (trajanje)
}
The evaluateTime funkcija traja nekaj časa. Časovni primerek in trajanje vrste čas. Trajanje, ki vrne čas v časovnem pasu. Naloži trenutni čas v "Afrika/Lagos" in času doda trajanje.
Manipulirajte čas in datum s časovnim paketom
Časovni paket je zelo vsestranski za delo s časi in datumi. Časovni paket ponuja funkcije, kot so Unix() za pretvorbo časa v čas Unix, Sleep() za zaustavitev goroutin in Format() za oblikovanje časovnih vrednosti v niz.