Intenté analizar la cadena de fecha "2014-09-12T11:45:26.371Z"
en Ir.
Código
layout := "2014-09-12T11:45:26.371Z"
str := "2014-11-12T11:45:26.371Z"
t, err := time.Parse(layout , str)
Tengo este error:
tiempo de análisis "2014-11-12T11: 47: 39.489Z": mes fuera de rango
¿Cómo puedo analizar esta cadena de fecha?
2006-01-02T15:04:05.000Z
deberse a algún estándar locoRespuestas:
Utilice los números de diseño exactos descritos aquí y una buena publicación de blog aquí .
entonces:
da:
Lo sé. Mente alucinante. También me atrapó por primera vez. Ir simplemente no usa una sintaxis abstracta para los componentes de fecha y hora (
YYYY-MM-DD
), sino estos números exactos (creo que la hora de la primera confirmación de irNo, de acuerdo con esto . ¿Alguien sabe?).fuente
El diseño a usar "
2006-01-02T15:04:05.000Z
" se describe en la respuesta de RickyA . No es "el momento del primer commit de go", sino más bien una forma mnemónica de recordar dicho diseño. Ver paquete / hora :(1,2,3,4,5,6,7, siempre que recuerde que 1 es para el mes y 2 para el día, que no es fácil para un europeo como yo, acostumbrado al formato de fecha día-mes)
Como se ilustra en " time.parse: ¿por qué Golang analiza el tiempo incorrectamente? ", Ese diseño (usando 1,2,3,4,5,6,7) debe respetarse exactamente .
fuente
strftime
FTW.Como se respondió, pero para guardar la escritura
"2006-01-02T15:04:05.000Z"
para el diseño, puede usar la constante RFC3339 del paquete .https://play.golang.org/p/Dgu2ZvHwTh
fuente
2006-01-02T15:04:05.000Z
y mencionan que Gotime.RFC3339
también funcionaría. Perotime.RFC3339 = "2006-01-02T15:04:05Z07:00"
. ¿Son estos dos formatos exactamente equivalentes en cuanto a quétime.Parse
y quétime.ParseInLocation
hará?Sugeriré usar time.RFC3339 constante del paquete de tiempo. Puede consultar otras constantes desde el paquete de tiempo. https://golang.org/pkg/time/#pkg-constants
fuente
Esto es bastante tarde para la fiesta, y realmente no digo nada que no se haya dicho ya de una forma u otra, principalmente a través de los enlaces anteriores, pero quería dar un TL; resumen de DR a aquellos con menos capacidad de atención:
La fecha y hora de la cadena de formato go es muy importante. Así es como Go sabe qué campo es cuál. Generalmente son 1-9 de izquierda a derecha de la siguiente manera:
Por lo tanto, no escriba "01-05-15" como su formato de fecha, a menos que quiera "Mes-Segunda-Hora"
(... de nuevo, esto fue básicamente un resumen de lo anterior).
fuente
Esto puede ser muy tarde, pero esto es para las personas que pueden tropezar con este problema y pueden querer usar un paquete externo para analizar la cadena de fecha.
Intenté buscar bibliotecas y encontré esta:
https://github.com/araddon/dateparse
Ejemplo de README:
fuente
Si ha trabajado con el formato / análisis de hora / fecha en otros idiomas, es posible que haya notado que los otros idiomas usan marcadores de posición especiales para el formato de fecha / hora. Por ejemplo, usos del lenguaje ruby
etc. Golang, en lugar de utilizar códigos como el anterior, utiliza marcadores de posición de formato de fecha y hora que solo parecen fecha y hora. Go usa el tiempo estándar, que es:
Entonces, si notas que Go usa
Por lo tanto, por ejemplo, para analizar 2020-01-29, la cadena de diseño debe ser 06-01-02 o 2006-01-02.
Puede consultar la tabla de diseño de marcador de posición completa en este enlace: https://golangbyexample.com/parse-time-in-golang/
fuente