Отмена маршалинга даты и времени в неправильном формате
При демаршалинге даты и времени 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