Az időzónák kulcsfontosságúak minden olyan alkalmazásban, amely dátumokkal és időpontokkal foglalkozik. Természetesen ez különösen igaz azokra az alkalmazásokra, amelyek kontinensek és helyek felhasználóit szolgálják ki. Az időzónák határozzák meg a koordinált világidő (UTC) eltolását a világ egyes helyein. Létfontosságú szerepet játszanak a pontos és megbízható időkezelés biztosításában.
A Go szabványos könyvtárában biztosítja az időcsomagot az idő- és időzónák kezeléséhez. Az időcsomag segítségével különböző helyeken lekérheti és konvertálhatja az időzónákat.
Az Időcsomag
A idő csomag funkcionalitást biztosít munkaidővel és dátummal, az idő mérése és megjelenítése, valamint a dátumok manipulálása Gergely-naptár segítségével szökőmásodpercek nélkül.
Az időcsomag biztosítja a Időstruktúra típusa tartalmazza az időzónák beállítására használható hely mezőt.
Az időcsomagot import utasítással importálhatja.
import"idő"
Itt látható az időstruktúra típusa és mezői. A mezőket nem exportálták, így hiányoznak a hivatalos dokumentációból.
csomag fő-
típus Idő struct {
// fal a falidő a runtime.nanotime() által visszaadott formátumban
// függvény.
fal uint64// ext a monoton óra olvasása a visszaadott formátumban
// runtime.nanotime().
ext int64// A loc egy mutató az ehhez az időhöz tartozó Location struktúrára.
loc *Helyszín
}típus Elhelyezkedés struct {
// a név az időzóna neve, például "UTC" vagy "PST".
név húr// zóna információkat tartalmaz az időzóna rövidítéséről, eltolásáról,
// és a hely egyetlen időzónájára vonatkozik.
zóna []zóna// tx információkat tartalmaz arról, hogy mikor az időzóna rövidítése ill
// eltolja a hely változásait.
tx []zoneTrans// kiterjesztése tartalmazza a szülő időzóna nevét, ha ez a hely
// egy másikból nyúlik ki.
kiterjeszt húr// A cacheStart és a cacheEnd Unix időbélyegek, amelyek meghatározzák a tartományt
// amelyre a cacheZone mező érvényes.
cacheStart int64
cacheEnd int64
// A cacheZone arra a zónára mutat, amely jelenleg érvényes az adott időpontban
// a cacheStart és a cacheEnd által meghatározott tartomány.
cacheZone *zóna
}
Számos módszer használja az Idő ill Elhelyezkedés struktúrák, beleértve az időzóna metódusokat is.
Időzóna információ betöltése
Az időzóna információ betöltése az egyik alapvető művelet az időzónákkal való munka során. A LoadLocation metódus funkcionalitást biztosít az időzóna információinak betöltéséhez a IANA időzóna adatbázis. A LoadLocation metódus beveszi az időzóna nevét, és visszaadja a helyadatokat és a kezelési hibát. Miután betöltötte az időzóna információit, létrehoz egy idő az időzónához társított struct példány.
import (
"fmt"
"idő"
)funcfő-() {
// Az Amerika/New_York időzóna helyének betöltése
loc, err := idő. LoadLocation("Amerika/New_York")ha hiba! = nulla {
fmt. Println("Hiba a hely betöltésekor:", hiba)
Visszatérés
}
// Az aktuális idő lekérése egy adott helyen
most := idő. Most().In (loc)
fmt. Println("Jelenlegi idő New Yorkban:", Most)
}
A Ban ben módszere a Most A funkció elfoglal egy helyet, és kiírja az időt:
Ezenkívül használhatja a FixedZone módszer az aktuális idő betöltésére egy helyen, ha ismeri a hely karakterláncát és az időzóna eltolását az UTC-től. Először be kell töltenie az aktuális időt UTC-ben, majd a FixedZone metódus segítségével töltse be a hely a karakterlánc és az eltolás alapján, mielőtt átadná a helyet az In metódusnak az idő szerint példa.
import (
"fmt"
"idő"
)funcfő-() {
// Az aktuális idő lekérése UTC-ben
most := idő. Most().UTC()// Állítsa be Lagos időzónáját
lagos := most. Időben. FixedZone("WAT", 3600))
// Az aktuális idő kinyomtatása mindkét helyen
fmt. Println("Jelenlegi idő Lagosban:", lagos)
}
A fő- funkció kiírja a konzolra a pontos időt Lagosban.
Időzóna időtartamának mérése
Az időcsomag biztosítja a Zóna az a-hoz tartozó időzóna rövidítésének és eltolásának lekérésére szolgáló módszer idő. Idő érték. A Zone metódus visszaadja az időzóna rövidítését jelző karakterláncot (pl. „EST” az „Amerika/New_York”) és egy egész számot, amely az UTC-től keletre lévő másodpercek számát jelzi.
import (
"fmt"
"idő"
)funcfő-() {
// Az Amerika/New_York időzóna helyének betöltése
loc, err := idő. LoadLocation("Amerika/New_York")ha hiba! = nulla {
fmt. Println("Hiba a hely betöltésekor:", hiba)
Visszatérés
}// Az aktuális idő lekérése UTC-ben és a megadott helyen
t1 := idő. Most()
t2 := t1.In (loc)// Minden időzóna eltolása másodpercben
//az időzónákhoz
_, eltolás1 := t1.Zóna()
_, offset2 := t2.Zóna()// Az időzóna-eltolás időtartamának kiszámítása
// UTC és Amerika/New_York között
időtartam := offset2 - offset1
fmt. Printf("Az időzóna eltolás időtartama" +
" UTC és New York között: %d másodperc", időtartam)
}
A fő funkcióban a zóna módszer a két időzóna közötti időzóna eltolódás időtartamát méri (idő. időértékek). A t1 változó az aktuális idő UTC-ben, és a t2 változó az aktuális idő az "Amerika/New_York" időzónában.
A funkció kiírja a időtartama változó (az időzónák közötti eltolás különbsége), amely az időzóna eltolódását jelenti másodpercekben.
Időzónák közötti idő értékelése
Kiértékelheti az időzónák közötti időt, ha ismeri az időzónák közötti időtartamot. Használhatja a Hozzáadás a te időd In módszerének módszere. Időstruktúra-példány, amely egy időzónában lévő időponthoz egy időtartamot ad hozzá.
import (
"napló"
"idő"// importálja az időcsomagot
)funcértékelésTime(t idő. Idő, időtartam, idő. időtartam)idő.Idő {
// Afrika/Lagos helyének betöltése
hely, err := idő. LoadLocation("Afrika/Lagos")
ha hiba! = nulla {
log. Println("Hiba történt a hely betöltésekor")
}
Visszatérés t. Itt (hely). Hozzáadás (időtartam)
}
A értékelésTime a funkció időbe telik. Időpéldány és típus időtartama idő. Időtartam, visszaadja az időt az időzónában. Betölti az aktuális időt "Afrikában/Lagosban", és időtartamot ad az időhöz.
Manipulálja az időt és a dátumot az időcsomaggal
Az időcsomag nagyon sokoldalú az időpontokkal és dátumokkal való munkavégzéshez. Az időcsomag olyan funkciókat biztosít, mint a Unix() az idő Unix idővé konvertálásához, a Sleep() a gorutinok szüneteltetéséhez és a Format() az időértékek karakterláncokká formázásához.