Laiko juostos yra labai svarbios bet kuriai programai, kuri susijusi su datomis ir laiku. Žinoma, tai ypač pasakytina apie programas, kurios aptarnauja naudotojus įvairiuose žemynuose ir vietose. Laiko juostos nustato konkrečių vietų visame pasaulyje poslinkį nuo koordinuoto pasaulinio laiko (UTC). Jie atlieka labai svarbų vaidmenį užtikrinant tikslų ir patikimą laiko valdymą.
„Go“ standartinėje bibliotekoje pateikia laiko paketą, skirtą darbui su laiko ir laiko juostomis. Naudodami laiko paketą galite gauti ir konvertuoti laiko juostas įvairiose vietose.
Laiko paketas
The laikas paketas suteikia funkcionalumą darbas su laiku ir datomis, matuoti ir rodyti laiką bei manipuliuoti datomis naudojant Grigaliaus kalendorių be šuolio sekundžių.
Laiko paketas numato a Laikasstruktūros tipas kuriame yra vietos laukas, kurį galite naudoti laiko juostoms nustatyti.
Laiko paketą galite importuoti naudodami importavimo teiginį.
importuoti"laikas"
Čia yra laiko struktūros tipas ir jo laukai. Laukai neeksportuoti, todėl jų nėra oficialioje dokumentacijoje.
paketą pagrindinis
tipo Laikas struktūra {
// siena yra sienos laikas tokiu formatu, kurį grąžina runtime.nanotime()
// funkcija.
siena uint64// ext yra monotoninis laikrodžio rodymas tokiu formatu, kurį grąžino
// Runtime.nanotime().
ext int64// loc yra žymeklis į Vietos struktūrą, susietą su šiuo laiku.
loc *Vieta
}tipo Vieta struktūra {
// pavadinimas yra laiko juostos pavadinimas, pvz., "UTC" arba "PST".
vardas styga// zonoje yra informacijos apie laiko juostos santrumpą, poslinkį,
// ir vienos vietos laiko juostos taisyklė.
zona []zona// tx yra informacija apie tai, kada laiko juostos santrumpa arba
// pakeisti vietos pakeitimus.
tx []zoneTrans// išplėsti yra pagrindinės laiko juostos pavadinimas, jei ši vieta
// tęsiasi iš kitos.
pratęsti styga// cacheStart ir cacheEnd yra Unix laiko žymos, kurios apibrėžia diapazoną
// kuriems galioja laukas cacheZone.
cacheStart int64
talpyklos pabaiga int64
// cacheZone nurodo zoną, kuri šiuo metu galioja tuo metu
// diapazonas, apibrėžtas cacheStart ir cacheEnd.
cacheZone *zona
}
Daugelis metodų naudoja Laiko ir Vieta struktūras, įskaitant laiko juostos metodus.
Įkeliama laiko juostos informacija
Laiko juostos informacijos įkėlimas yra viena iš pagrindinių operacijų dirbant su laiko juostomis. The Įkrovimo vieta metodas suteikia galimybę įkelti laiko juostos informaciją iš IANA laiko juostos duomenų bazė. The Įkrovimo vieta metodas paima laiko juostos pavadinimą ir grąžina vietos informaciją bei tvarkymo klaidą. Įkėlęs laiko juostos informaciją, jis sukuria a laikas struct egzempliorius, susietas su laiko juosta.
importuoti (
"fmt"
"laikas"
)funcpagrindinis() {
// Įkelkite Amerikos/Niujorko laiko juostos vietą
loc, err := laikas. LoadLocation(„Amerika/Niujorkas“)jeigu klysta! = nulis {
fmt. Println("Klaida įkeliant vietą:", klaida)
grąžinti
}
// Gaukite dabartinį laiką tam tikroje vietoje
dabar := laikas. Dabar().In (loc)
fmt. Println("Dabartinis laikas Niujorke:", dabar)
}
The Į metodas Dabar funkcija užima vietą ir joje išspausdina laiką:
Be to, galite naudoti Fiksuota zona būdas įkelti esamą laiką vietoje, jei žinote vietos eilutę ir laiko juostos poslinkį nuo UTC. Pirmiausia turėsite įkelti dabartinį laiką UTC, o tada naudodami FixedZone metodą įkelsite vieta pagal eilutę ir poslinkį prieš perduodant vietą laiko metodui instancija.
importuoti (
"fmt"
"laikas"
)funcpagrindinis() {
// Gaukite dabartinį laiką UTC
dabar := laikas. Dabar().UTC()// Nustatykite Lagoso laiko juostą
Lagos := dabar. Laiku. FixedZone("WAT", 3600))
// Spausdinkite dabartinį laiką abiejose vietose
fmt. Println("Dabartinis laikas Lagose:", Lagosas)
}
The pagrindinis funkcija išspausdina dabartinį Lagoso laiką į konsolę.
Laiko juostos trukmės matavimas
Laiko paketas suteikia Zona laiko juostos, susijusios su a, santrumpos ir poslinkio gavimo metodas laikas. Laikas vertė. Zonos metodas grąžina eilutę, vaizduojančią laiko juostos santrumpą (pvz., „EST“ reiškia „Amerika/Niujorkas“) ir sveikąjį skaičių, nurodantį sekundžių skaičių į rytus nuo UTC.
importuoti (
"fmt"
"laikas"
)funcpagrindinis() {
// Įkelkite Amerikos/Niujorko laiko juostos vietą
loc, err := laikas. LoadLocation(„Amerika/Niujorkas“)jeigu klysta! = nulis {
fmt. Println("Klaida įkeliant vietą:", klaida)
grąžinti
}// Gaukite dabartinį laiką UTC ir nurodytą vietą
t1 := laikas. Dabar ()
t2 := t1.In (loc)// Gauti poslinkį sekundėmis kiekvienai laiko juostai
//laiko juostoms
_, poslinkis1 := t1.Zona()
_, poslinkis2 := t2.Zona()// Apskaičiuokite laiko juostos poslinkio trukmę
// tarp UTC ir Amerikos/Niujorko
trukmė := poslinkis2 - poslinkis1
fmt. Printf(„Laiko juostos pakeitimo trukmė“ +
" tarp UTC ir Niujorko yra: %d sekundžių", trukmė)
}
Pagrindinėje funkcijoje zonos metodas matuoja laiko juostos poslinkio tarp dviejų laiko juostų trukmę (laikas. Laiko reikšmės). The t1 kintamasis yra dabartinis laikas UTC ir t2 kintamasis yra dabartinis laikas „Amerika/Niujorkas“ laiko juostoje.
Funkcija spausdina trukmės kintamasis (laiko juostų poslinkio skirtumas), nurodantis laiko juostos poslinkį sekundėmis.
Laiko tarp laiko juostų įvertinimas
Galite įvertinti laiką tarp laiko juostų, jei žinote trukmę tarp laiko juostų. Galite naudoti Papildyti Jūsų laikų In metodo metodas. Laiko struktūros pavyzdys, skirtas pridėti trukmę prie laiko laiko juostoje.
importuoti (
"rąstas"
"laikas"// importuoti laiko paketą
)funcįvertintiLaikas(t laikas. Laikas, trukmės laikas. Trukmė)laikas.Laikas {
// įkelkite Afrikos/Lagoso vietą
vieta, klaida := laikas. LoadLocation(„Afrika/Lagosas“)
jeigu klysta! = nulis {
žurnalas. Println(„Įkeliant vietą įvyko klaida“)
}
grąžinti t. Vietoje. Pridėti (trukmė)
}
The įvertintiLaikas funkcija užtrunka. Laiko pavyzdys ir tipo trukmė laikas. Trukmė, grąžina laiką laiko juostoje. Jis įkelia dabartinį laiką „Afrikoje/Lagose“ ir prideda laiko trukmę.
Manipuliuokite laiką ir datą naudodami laiko paketą
Laiko paketas yra labai universalus dirbant tiek su laiku, tiek su datomis. Laiko paketas teikia tokias funkcijas kaip Unix() laikui konvertuoti į Unix laiką, Sleep() gorutinoms pristabdyti ir Formatas() laiko reikšmes formatuoti į eilutę.