Desclasificar fechas y horas con formato incorrecto
Al desclasificar fechas y horas JSON en Go, surge un problema común cuando el desplazamiento de zona horaria proporcionado en JSON tiene un formato incorrecto . El formato esperado, según RFC3339, es 02:00 con dos puntos, pero algunas fuentes pueden generarlo como 0200 sin dos puntos.
Solución personalizada de desclasificación
Para Para manejar esta discrepancia, se puede definir un tipo de campo de hora personalizado que admita ambos formatos:
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
}
Esta solución aprovecha el método UnmarshalJSON para eliminar primero las comillas de la cadena JSON. Luego, intenta analizar la fecha y hora utilizando el formato estándar RFC3339Nano. Si eso falla, vuelve a analizar un formato modificado que elimina los dos puntos del desplazamiento de la zona horaria.
Integración de estructuras
Para integrar este tipo en una estructura, defina como:
type Test struct {
Time MyTime `json:"time"`
}
Esto permite descomponer JSON en una estructura de prueba, y el campo Hora se completa con la fecha y hora correctas, independientemente de si el desplazamiento de la zona horaria está separado por dos puntos o no.
Nota sobre el formato de hora
El uso del año 2006 en las cadenas de formato de hora es un artefacto histórico del lanzamiento inicial de Go. No tiene importancia práctica y no afecta la corrección o el formato de las fechas y horas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3