Tijdzones zijn cruciaal voor elke toepassing die met datums en tijden te maken heeft. Dit geldt natuurlijk vooral voor apps die gebruikers op verschillende continenten en locaties van dienst zijn. Tijdzones bepalen de afwijking van Coordinated Universal Time (UTC) voor specifieke locaties over de hele wereld. Ze spelen een cruciale rol bij het waarborgen van een nauwkeurige en betrouwbare tijdafhandeling.
Go biedt het tijdpakket in zijn standaardbibliotheek voor het werken met tijd en tijdzones. Met het tijdpakket kunt u op verschillende locaties tijdzones ophalen en omrekenen.
Het tijdpakket
De tijd pakket biedt functionaliteit voor werken met tijden en datums, tijd meten en weergeven en datums manipuleren met behulp van een Gregoriaanse kalender zonder schrikkelseconden.
Het tijdspakket biedt een Tijdstruct type met het locatieveld dat u kunt gebruiken om tijdzones in te stellen.
U kunt het tijdpakket importeren met een importopdracht.
importeren"tijd"
Dit is het type tijdstructuur en de velden. De velden zijn niet geëxporteerd, dus ontbreken ze in de officiële documentatie.
pakket voornaamst
type Tijd structuur {
// wall is de wall-tijd in het formaat dat wordt geretourneerd door de runtime.nanotime()
// functie.
muur uint64// ext is de monotone klokwaarde in het formaat geretourneerd door
// runtime.nanotime().
ext int64// loc is een verwijzing naar de locatiestructuur die bij deze tijd hoort.
locomotief *Locatie
}type Plaats structuur {
// naam is de naam van de tijdzone, zoals "UTC" of "PST".
naam snaar// zone bevat informatie over de afkorting van de tijdzone, offset,
// en regel voor een enkele tijdzone op de locatie.
zone []zone// tx bevat informatie over wanneer de tijdzone-afkorting or
// offset wijzigingen voor een locatie.
tx []zoneTrans// extend bevat de naam van een bovenliggende tijdzone als deze locatie
// strekt zich uit van een andere.
verlengen snaar// cacheStart en cacheEnd zijn Unix-tijdstempels die het bereik bepalen
// waarvoor het veld cacheZone geldig is.
cacheStart int64
cacheEinde int64
// cacheZone verwijst naar de zone die momenteel geldig is voor die tijd
// bereik gedefinieerd door cacheStart en cacheEnd.
cacheZone *zone
}
Veel methoden gebruiken de tijd en Plaats structs, inclusief de tijdzonemethoden.
Tijdzone-informatie laden
Tijdzone-informatie laden is een van de basishandelingen bij het werken met tijdzones. De Locatie laden methode biedt functionaliteit voor het laden van tijdzone-informatie van de IANA-tijdzonedatabase. De Locatie laden methode neemt de naam van de tijdzone op en retourneert de locatie-informatie en een fout voor afhandeling. Zodra het de tijdzone-informatie heeft geladen, maakt het een tijd struct-instantie die is gekoppeld aan de tijdzone.
importeren (
"fmt"
"tijd"
)funcvoornaamst() {
// Laad de tijdzonelocatie voor America/New_York
loc, err := tijd. LaadLocatie("Amerika/New_York")als fout!= nihil {
fmt. Println("Fout bij laden locatie:", fout)
opbrengst
}
// Krijg de huidige tijd op een locatie
nu := tijd. Nu().In (loc)
fmt. Println("Huidige tijd in New York:", nu)
}
De In methode van de Nu functie neemt een locatie op en drukt de tijd daar af:
Daarnaast kunt u gebruik maken van de VasteZone methode om de huidige tijd op een locatie te laden als u de locatietekenreeks en de offset van de tijdzone ten opzichte van UTC kent. Eerst moet u de huidige tijd in UTC laden en vervolgens gebruikt u de FixedZone-methode om de locatie op basis van de tekenreeks en offset voordat de locatie wordt doorgegeven aan de In-methode van de tijd voorbeeld.
importeren (
"fmt"
"tijd"
)funcvoornaamst() {
// Krijg de huidige tijd in UTC
nu := tijd. Nu().UTC()// Stel de tijdzone in voor Lagos
lagos := nu. Op tijd. VasteZone("WAT", 3600))
// Print de huidige tijd op beide locaties
fmt. Println("Huidige tijd in Lagos:", Lagos)
}
De voornaamst functie print de huidige tijd in Lagos naar de console.
Tijdzoneduur meten
Het tijdspakket biedt de Zone methode voor het ophalen van de afkorting en offset van de tijdzone geassocieerd met a tijd. Tijd waarde. De Zone-methode retourneert de tekenreeks die de afkorting van de tijdzone vertegenwoordigt (bijv. "EST" voor "America/New_York") en een geheel getal dat het aantal seconden ten oosten van de UTC vertegenwoordigt.
importeren (
"fmt"
"tijd"
)funcvoornaamst() {
// Laad de tijdzonelocatie voor America/New_York
loc, err := tijd. LaadLocatie("Amerika/New_York")als fout!= nihil {
fmt. Println("Fout bij laden locatie:", fout)
opbrengst
}// Krijg de huidige tijd in UTC en de opgegeven locatie
t1 := tijd. Nu()
t2 := t1.In (loc)// Verkrijg de offset in seconden voor elke tijdzone
// voor de tijdzones
_, offset1 := t1.Zone()
_, offset2 := t2.Zone()// Bereken de duur van de tijdzoneverschuiving
// tussen UTC en America/New_York
duur := offset2 - offset1
fmt. Afdrukkenf("De duur van de tijdzoneverschuiving" +
" tussen UTC en New York is: %d seconden", duur)
}
In de hoofdfunctie meet de Zone-methode de duur van de tijdzoneverschuiving tussen twee tijdzones (time. Tijdswaarden). De t1 variabele is de huidige tijd in UTC, en de t2 variabele is de huidige tijd in de tijdzone "America/New_York".
De functie drukt de duur variabele (het verschil in offset tussen de tijdzones) die de tijdzoneverschuiving in seconden weergeeft.
Tijd tussen tijdzones evalueren
U kunt de tijd tussen tijdzones evalueren als u de tijdsduur tussen de tijdzones kent. U kunt de Toevoegen methode van de In-methode van uw tijd. Time struct instantie om een duur toe te voegen aan de tijd in een tijdzone.
importeren (
"logboek"
"tijd"// importeer het tijdpakket
)funcevaluerenTijd(t tijd. Tijd, tijdsduur. Duur)tijd.Tijd {
// laad de locatie voor Afrika/Lagos
locatie, err := tijd. LaadLocatie("Afrika/Lagos")
als fout!= nihil {
loggen. Println("Er is een fout opgetreden bij het laden van de locatie")
}
opbrengst T. In (locatie).Toevoegen (duur)
}
De evaluerenTijd functie duurt even. Tijdinstantie en een duur van het type tijd. Duur, waarbij de tijd in de tijdzone wordt geretourneerd. Het laadt de huidige tijd in "Africa/Lagos" en voegt een duur toe aan de tijd.
Manipuleer tijd en datum met het tijdpakket
Het tijdpakket is zeer veelzijdig om zowel met tijden als met datums te werken. Het time-pakket biedt functies zoals Unix() voor het converteren van tijd naar Unix-tijd, Sleep() voor het pauzeren van goroutines en Format() voor het formatteren van tijdwaarden in tekenreeksen.