„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie entmarshaliere ich falsch formatierte Datumsangaben in Go?

Wie entmarshaliere ich falsch formatierte Datumsangaben in Go?

Veröffentlicht am 09.11.2024
Durchsuche:425

How to Unmarshal Incorrectly Formatted Datetimes in Go?

Unmarshal Falsch formatierte Datetime

Beim Unmarshaling von JSON-Datetimes in Go tritt ein häufiges Problem auf, wenn der im JSON angegebene Zeitzonenoffset 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:

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
}

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 Zeitzonenoffset entfernt.

Strukturintegration

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

type Test struct {
    Time MyTime `json:"time"`
}

Dadurch kann JSON in eine Teststruktur entmarshaled werden, wobei das Zeitfeld mit dem korrekten Datum und der korrekten 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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3