«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как демаршалировать неправильно отформатированные даты и время в Go?

Как демаршалировать неправильно отформатированные даты и время в Go?

Опубликовано 9 ноября 2024 г.
Просматривать:504

How to Unmarshal Incorrectly Formatted Datetimes in Go?

Отмена маршалинга даты и времени в неправильном формате

При демаршалинге даты и времени JSON в Go часто возникает проблема, когда смещение часового пояса, указанное в JSON, имеет неправильный формат. . Ожидаемый формат, согласно RFC3339, — 02:00 с двоеточием, но некоторые источники могут выводить его как 0200 без двоеточия.

Пользовательское решение для демаршалинга

Чтобы Чтобы справиться с этим несоответствием, можно определить собственный тип поля времени, поддерживающий оба формата:

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
}

Это решение использует метод UnmarshalJSON, чтобы сначала удалить кавычки из строки JSON. Затем он пытается проанализировать дату и время, используя стандартный формат RFC3339Nano. Если это не удается, он возвращается к анализу измененного формата, который удаляет двоеточие из смещения часового пояса.

Интеграция структур

Чтобы интегрировать этот тип в структуру, определите это как:

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

Это позволяет демаршалировать JSON в структуру Test, при этом поле Time будет заполнено правильной датой и временем, независимо от того, отделено ли смещение часового пояса двоеточием или нет.

Примечание о формате времени

Использование 2006 года в строках формата времени является историческим артефактом из первоначальной версии Go. Это не имеет практического значения и не влияет на правильность или форматирование даты и времени.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3