Tentei analisar a sequência de datas "2014-09-12T11:45:26.371Z"
no Go.
Código
layout := "2014-09-12T11:45:26.371Z"
str := "2014-11-12T11:45:26.371Z"
t, err := time.Parse(layout , str)
Eu recebi este erro:
tempo de análise "2014-11-12T11: 47: 39.489Z": mês fora do intervalo
Como posso analisar essa sequência de datas?
2006-01-02T15:04:05.000Z
devido a alguns padrões malucosRespostas:
Use os números exatos do layout descritos aqui e um bom post aqui .
tão:
dá:
Eu sei. Incompreensível. Também me pegou pela primeira vez. Go simplesmente não usa uma sintaxe abstrata para componentes datetime (
YYYY-MM-DD
), mas esses números exatos (acho que a hora do primeiro commit de irNão, de acordo com isso . Alguém sabe?).fonte
O layout para utilização é de fato "
2006-01-02T15:04:05.000Z
" descrito no RickyA 's resposta .Não é "a hora do primeiro commit de ir", mas uma maneira mnemônica de lembrar o layout.
Veja pkg / time :
(1,2,3,4,5,6,7, desde que você lembre-se de que 1 é para o mês e 2 para o dia, o que não é fácil para um europeu como eu, usado para o formato de dia do mês)
Conforme ilustrado em " time.parse: por que golang analisa o tempo incorretamente? ", Esse layout (usando 1,2,3,4,5,6,7) deve ser respeitado exatamente .
fonte
strftime
FTW.Como respondido, mas para salvar a digitação
"2006-01-02T15:04:05.000Z"
do layout, você pode usar o RFC3339 constante do pacote .https://play.golang.org/p/Dgu2ZvHwTh
fonte
2006-01-02T15:04:05.000Z
e mencionam que os Go'stime.RFC3339
também funcionariam. Mastime.RFC3339 = "2006-01-02T15:04:05Z07:00"
. Esses dois formatos são exatamente equivalentes na medida em quetime.Parse
e o quetime.ParseInLocation
fará?Vou sugerir o uso de time.RFC3339 constante do pacote de tempo. Você pode verificar outras constantes do pacote de horário. https://golang.org/pkg/time/#pkg-constants
fonte
Isso é muito tarde para a festa, e realmente não estou dizendo nada que já não tenha sido dito de uma forma ou de outra, principalmente através dos links acima, mas eu queria dar uma recapitulação TL; DR para aqueles com menos atenção:
A data e hora da sequência de formatação é muito importante. É como o Go sabe qual campo é qual. Eles geralmente são de 1 a 9 da esquerda para a direita, da seguinte maneira:
Portanto, não escreva "01-05-15" como formato de data, a menos que queira "Mês-Segunda-Hora"
(... novamente, este foi basicamente um resumo acima).
fonte
Isso pode ser muito tarde, mas é para pessoas que podem encontrar esse problema e podem querer usar um pacote externo para analisar a sequência de datas.
Eu tentei procurar por bibliotecas e encontrei esta:
https://github.com/araddon/dateparse
Exemplo do README:
fonte
Se você trabalhou com a formatação / análise de data / hora em outros idiomas, pode ter notado que os outros idiomas usam espaços reservados especiais para a formatação de data / hora. Por exemplo, linguagem Ruby usa
etc. Golang, em vez de usar códigos como os mencionados acima, usa espaços reservados de formato de data e hora que se parecem apenas com data e hora. Go usa o horário padrão, que é:
Então, se você perceber que o Go usa
Portanto, por exemplo, para analisar 2020-01-29, a sequência de layout deve ser 06-01-02 ou 2006-01-02.
Você pode consultar a tabela de layout de espaço reservado completo neste link - https://golangbyexample.com/parse-time-in-golang/
fonte