Heim > Backend-Entwicklung > Golang > Wie entmarshaliere ich falsch formatierte Datumsangaben in Go?

Wie entmarshaliere ich falsch formatierte Datumsangaben in Go?

Mary-Kate Olsen
Freigeben: 2024-11-06 10:43:02
Original
282 Leute haben es durchsucht

How to Unmarshal Incorrectly Formatted Datetimes in Go?

Falsch formatierte Datums- und Uhrzeitangaben entmarshalieren

Beim Entmarshalieren von JSON-Datums- und Uhrzeitangaben in Go tritt ein häufiges Problem auf, wenn der im JSON angegebene Zeitzonenversatz falsch formatiert ist . Das erwartete Format gemäß RFC3339 ist 02:00 mit einem Doppelpunkt, einige Quellen geben es jedoch möglicherweise als 0200 ohne Doppelpunkt aus.

Benutzerdefinierte Unmarshaling-Lösung

An Um diese Diskrepanz zu bewältigen, kann ein benutzerdefinierter Zeitfeldtyp definiert werden, der beide Formate unterstützt:

<code class="go">type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)
    s = s[1:len(s)-1] // Remove the quotes

    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}</code>
Nach dem Login kopieren

Diese Lösung nutzt die UnmarshalJSON-Methode, um zunächst die Anführungszeichen aus der JSON-Zeichenfolge zu entfernen. Anschließend wird versucht, die Datums- und Uhrzeitangaben im Standardformat RFC3339Nano zu analysieren. Wenn dies fehlschlägt, wird auf das Parsen eines geänderten Formats zurückgegriffen, das den Doppelpunkt aus dem Zeitzonen-Offset entfernt.

Strukturintegration

Um diesen Typ in eine Struktur zu integrieren, definieren Sie es als:

<code class="go">type Test struct {
    Time MyTime `json:"time"`
}</code>
Nach dem Login kopieren

Dadurch kann JSON in eine Teststruktur entmarshaled werden, wobei das Zeitfeld mit dem richtigen Datum und der richtigen Uhrzeit gefüllt wird, unabhängig davon, ob der Zeitzonenversatz durch Doppelpunkte getrennt ist oder nicht.

Hinweis zum Zeitformat

Die Verwendung des Jahres 2006 in den Zeitformatzeichenfolgen ist ein historisches Artefakt aus der ersten Veröffentlichung von Go. Es hat keine praktische Bedeutung und hat keinen Einfluss auf die Richtigkeit oder Formatierung von Datumsangaben.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich falsch formatierte Datumsangaben 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