Heim > Backend-Entwicklung > Golang > Warum erzeugt das Hinzufügen eines UTC-Offsets zur UTC-Zeit nicht genau die Ortszeit in Go?

Warum erzeugt das Hinzufügen eines UTC-Offsets zur UTC-Zeit nicht genau die Ortszeit in Go?

Susan Sarandon
Freigeben: 2024-12-21 16:18:10
Original
553 Leute haben es durchsucht

Why Does Adding a UTC Offset to UTC Time Not Accurately Produce Local Time in Go?

Probleme beim Konvertieren von UTC in Ortszeit in Go

Problemübersicht

Beim Versuch, UTC-Zeit in Ortszeit umzuwandeln, Bestimmte Benutzer erhalten falsche Ergebnisse. Das Problem tritt insbesondere auf, wenn eine Dauer, die aus einem angegebenen UTC-Offset berechnet wird, zur aktuellen UTC-Zeit addiert wird. Dieser zurückgegebene Wert weicht von der erwarteten Ortszeit ab.

Erster Ansatz

Das Code-Snippet initialisiert eine Karte mit UTC-Offsets für verschiedene Länder. Es wird versucht, den Offset für „Ungarn“ in eine Dauer umzuwandeln, ihn zur UTC-Zeit zu addieren und das Ergebnis als „Ortszeit“ anzuzeigen.

package main

import "fmt"
import "time"

func main() {

    m := make(map[string]string)
    m["Hungary"] = "+01.00h"

    offSet, err := time.ParseDuration(m["Hungary"])
    if err != nil {
        panic(err)
    }
    t := time.Now().UTC().Add(offSet)
    nice := t.Format("15:04")

    fmt.Println(nice)
}
Nach dem Login kopieren

Falsche Ergebnisse

Bei der Ausführung erzeugt der Code falsche Ortszeiten, insbesondere für Länder mit einem Offset zur UTC. Beispielsweise spiegelt das Ergebnis bei Ungarns einstündigem Zeitversatz nicht die tatsächliche Ortszeit wider.

Ursache

Die falschen Ergebnisse beruhen auf der Annahme, dass die Die angepasste UTC-Zeit entspricht der Ortszeit. Diese Annahme lässt jedoch das Konzept der Zeitzonen außer Acht.

Überlegungen zu Zeitzonen

Zeitzonen sind geografische Regionen, in denen aus rechtlichen, kommerziellen und sozialen Gründen eine Standardzeit gilt . Verschiedene Zeitzonen haben ihren eigenen Offset von UTC, der den Zeitunterschied zum Nullmeridian darstellt.

Richtiger Ansatz

Um die UTC-Zeit genau in eine bestimmte Ortszeit umzurechnen, Es ist wichtig, die mit diesem Standort verbundene Zeitzone zu berücksichtigen. Mit der Funktion time.LoadLocation können Sie ein Zeitzonenobjekt basierend auf seiner Zeichenfolgenkennung abrufen.

var countryTz = map[string]string{
    "Hungary": "Europe/Budapest",
    "Egypt":   "Africa/Cairo",
}

func timeIn(name string) time.Time {
    loc, err := time.LoadLocation(countryTz[name])
    if err != nil {
        panic(err)
    }
    return time.Now().In(loc)
}

func main() {
    utc := time.Now().UTC().Format("15:04")
    hun := timeIn("Hungary").Format("15:04")
    eg := timeIn("Egypt").Format("15:04")
    fmt.Println(utc, hun, eg)
}
Nach dem Login kopieren

Diese Lösung stellt sicher, dass die konvertierte Zeit die Ortszeit für das angegebene Land unter Berücksichtigung der relevanten Zeit widerspiegelt Zone.

Das obige ist der detaillierte Inhalt vonWarum erzeugt das Hinzufügen eines UTC-Offsets zur UTC-Zeit nicht genau die Ortszeit in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage