Fusurile orare sunt cruciale pentru orice aplicație care se ocupă de date și ore. Desigur, acest lucru este valabil mai ales pentru aplicațiile care servesc utilizatorilor de pe continente și locații. Fusurile orare determină decalajul față de Ora universală coordonată (UTC) pentru anumite locații din lume. Ele joacă un rol vital în asigurarea unei gestionări precise și fiabile a timpului.
Go oferă pachetul de timp în biblioteca sa standard pentru lucrul cu ora și fusurile orare. Puteți prelua și converti fusurile orare din diferite locații folosind pachetul de timp.
Pachetul de timp
The timp pachetul oferă funcționalitate pt lucrând cu ore și date, măsurarea și afișarea timpului și manipularea datelor folosind un calendar gregorian fără secunde bisecătoare.
Pachetul de timp oferă a Timptip struct care conține câmpul de locație pe care îl puteți utiliza pentru a seta fusurile orare.
Puteți importa pachetul de timp cu o declarație de import.
import"timp"
Iată tipul de structură de timp și câmpurile acestuia. Câmpurile sunt neexportate, deci lipsesc din documentația oficială.
pachet principal
tip Timp struct {
// wall este timpul de perete în formatul returnat de runtime.nanotime()
// funcția.
perete uint64// ext este citirea monotonă a ceasului în formatul returnat de
// runtime.nanotime().
ext int64// loc este un pointer către structura Locație asociată cu acest timp.
loc *Locatie
}tip Locație struct {
// numele este numele fusului orar, cum ar fi „UTC” sau „PST”.
Nume şir// zona conține informații despre abrevierea fusului orar, offset,
// și regulă pentru un singur fus orar din locație.
zone []zonă// tx conține informații despre când abrevierea fusului orar sau
// compensarea modificărilor pentru o locație.
tx []zoneTrans// extinde conține numele unui fus orar părinte dacă această locație
// se extinde de la altul.
extinde şir// cacheStart și cacheEnd sunt marcaje temporale Unix care definesc intervalul
// pentru care câmpul cacheZone este valid.
cacheStart int64
cacheEnd int64
// cacheZone indică zona care este valabilă în prezent pentru momentul respectiv
// interval definit de cacheStart și cacheEnd.
cacheZone *zonă
}
Multe metode folosesc Timpul și Locație structuri, inclusiv metodele de fus orar.
Se încarcă informații despre fusul orar
Încărcarea informațiilor despre fusul orar este una dintre operațiunile de bază atunci când lucrați cu fusul orar. The LoadLocation Metoda oferă funcționalitate pentru încărcarea informațiilor despre fusul orar din Baza de date de fus orar IANA. The LoadLocation metoda preia numele fusului orar și returnează informațiile despre locație și o eroare de manipulare. Odată ce a încărcat informațiile despre fusul orar, creează un timp instanță struct asociată cu fusul orar.
import (
"fmt"
"timp"
)funcprincipal() {
// Încărcați locația de fus orar pentru America/New_York
loc, err := timp. LoadLocation(„America/New_York”)dacă greș!= zero {
fmt. Println(„Eroare la încărcarea locației:”, greseala)
întoarcere
}
// Obține ora curentă într-o locație
acum := timp. Acum().În (loc)
fmt. Println(„Ora curentă în New York:”, acum)
}
The În metoda de Acum funcția preia o locație și tipărește ora acolo:
În plus, puteți utiliza FixedZone metodă de a încărca ora curentă într-o locație dacă cunoașteți șirul locației și decalajul fusului orar față de UTC. Mai întâi, va trebui să încărcați ora curentă în UTC, apoi veți folosi metoda FixedZone pentru a încărca locație bazată pe șir și offset înainte de a trece locația către metoda În metoda timpului instanță.
import (
"fmt"
"timp"
)funcprincipal() {
// Obține ora curentă în UTC
acum := timp. Acum().UTC()// Setați fusul orar pentru Lagos
lagos := acum. La timp. FixedZone("CE", 3600))
// Tipăriți ora curentă în ambele locații
fmt. Println(„Ora curentă în Lagos:”, Lagos)
}
The principal funcția imprimă pe consolă ora curentă din Lagos.
Măsurarea duratei fusului orar
Pachetul de timp oferă Zona metoda de preluare a abrevierii și decalajului fusului orar asociat cu a timp. Timp valoare. Metoda Zone returnează șirul care reprezintă abrevierea fusului orar (de exemplu, „EST” pentru „America/New_York”) și un număr întreg care reprezintă numărul de secunde la est de UTC.
import (
"fmt"
"timp"
)funcprincipal() {
// Încărcați locația de fus orar pentru America/New_York
loc, err := timp. LoadLocation(„America/New_York”)dacă greș!= zero {
fmt. Println(„Eroare la încărcarea locației:”, greseala)
întoarcere
}// Obține ora curentă în UTC și locația specificată
t1 := timp. Acum()
t2 := t1.In (loc)// Obțineți compensarea în secunde pentru fiecare fus orar
//pentru fusurile orare
_, offset1 := t1.Zone()
_, offset2 := t2.Zone()// Calculați durata schimbării fusului orar
// între UTC și America/New_York
durata := offset2 - offset1
fmt. Printf(„Durata schimbării fusului orar” +
„între UTC și New York este: %d secunde”, durată)
}
În funcția principală, metoda Zone măsoară durata schimbării fusului orar între două fusuri orare (ora. valori de timp). The t1 variabila este ora curentă în UTC și t2 variabilă este ora curentă în fusul orar „America/New_York”.
Funcția imprimă durată variabilă (diferența de offset între fusurile orare) reprezentând schimbarea fusului orar în secunde.
Evaluarea timpului dintre fusurile orare
Puteți evalua timpul dintre fusurile orare dacă cunoașteți durata dintre fusurile orare. Puteți folosi Adăuga metoda In metoda timpului tau. Time struct instance pentru a adăuga o durată la ora dintr-un fus orar.
import (
"Buturuga"
"timp"// import pachetul de timp
)funcevaluateTime(t timp. Timp, durata timp. Durată)timp.Timp {
// încărcați locația pentru Africa/Lagos
locație, greșeală := oră. LoadLocation(„Africa/Lagos”)
dacă greș!= zero {
Buturuga. Println(„A apărut o eroare la încărcarea locației”)
}
întoarcere t. În (locație).Adăugați (durată)
}
The evaluateTime funcția durează un timp. Instanță de timp și o durată de tip timp. Durată, returnând ora în fusul orar. Încarcă ora curentă în „Africa/Lagos” și adaugă o durată timpului.
Manipulați ora și data cu pachetul de timp
Pachetul de timp este foarte versatil pentru a lucra atât cu ore, cât și cu date. Pachetul de timp oferă funcții precum Unix() pentru conversia timpului în timp Unix, Sleep() pentru întreruperea goroutinelor și Format() pentru formatarea valorilor de timp în șir.