"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo desarmar fechas y horas con formato incorrecto en Go?

¿Cómo desarmar fechas y horas con formato incorrecto en Go?

Publicado el 2024-11-09
Navegar:540

How to Unmarshal Incorrectly Formatted Datetimes in Go?

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.

Último tutorial Más>

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