Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entmarshaliere ich inkonsistente Datetime-Formate in Go?

Wie entmarshaliere ich inkonsistente Datetime-Formate in Go?

Barbara Streisand
Barbara StreisandOriginal
2024-11-05 05:31:01671Durchsuche

How to Unmarshal Inconsistent Datetime Formats in Go?

Unmarshaling inkonsistenter Datetime-Formate

Beim Umgang mit JSON-Daten kann das Unmarshaling von Datetimes aufgrund unterschiedlicher Zeitzonen-Offsetformate zu Inkonsistenzen führen. Während der Standard-Parsing-Mechanismus von Go Zeitzonen-Offsets im Format 02:00 erwartet, enthalten einige Daten möglicherweise falsche Formate wie 0200.

Um dieses Problem zu beheben, bietet Go eine benutzerdefinierte Unmarshaling-Methode, um sowohl korrekte als auch falsche Zeitzonenformate zu verarbeiten. Hier ist ein überarbeiteter Ansatz:

type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)

    // Remove quotation marks
    s = s[1:len(s)-1]

    // Attempt to parse using RFC3339Nano format
    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        // If parsing fails, try custom format without ':'
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}

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

In dieser benutzerdefinierten Unmarshaling-Methode (UnmarshalJSON) führen wir:

  1. Parsen mit dem Standardformat RFC3339Nano aus.
  2. Wenn das Parsen fehlschlägt Aufgrund des falschen Zeitzonen-Offset-Formats analysieren wir mit einem modifizierten Format („2006-01-02T15:04:05.999999999Z0700“), das ein „:“ in den Zeitzonen-Offset einfügt.

Dieser Ansatz gewährleistet dass sowohl korrekte als auch falsch formatierte Datums-/Uhrzeitzeichenfolgen korrekt analysiert werden.

Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich inkonsistente Datetime-Formate in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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