Sobre esta ferramenta
Um layout é um exemplo, não um padrão
A maioria das linguagens descreve um formato de data com marcadores como %Y-%m-%d ou YYYY-MM-DD. O Go faz de outra forma: escreve-se como deve ficar um momento concreto, a hora de referência, e time.Format imprime qualquer outra hora da mesma forma. A hora de referência é Mon Jan 2 15:04:05 MST 2006.
Os valores foram escolhidos de modo a seguirem uma ordem crescente quando escritos na ordem americana 01/02 03:04:05PM '06 -0700: mês 1, dia 2, hora 3 (ou 15 no formato de 24 horas), minuto 4, segundo 5, ano 6 e um desvio de fuso de menos 7 horas. Cada valor só pode representar uma coisa, e é assim que o Go sabe que 01 é um mês e 04 um minuto.
Erros comuns
Como 01 é o mês e 02 o dia, uma data com o dia primeiro escreve-se 02/01/2006, o que parece errado a quem está habituado à ordem de referência. Um layout escrito com outros hábitos também não dá erro. O Go imprime como texto literal o que não reconhece, por isso YYYY-MM-DD sai inalterado, e lê como token cada dígito que reconhece, por isso 2021-12-25 sai como números sem relação com a data.
Não há forma de escapar um token. Um texto que por acaso contenha um é substituído, por isso um Jan, um Mon ou um dígito como 2 escritos literalmente num layout transformam-se num valor. Acrescente esse texto fora do layout.
Z07:00 imprime Z para UTC e um desvio numérico nos outros casos, que é o que o RFC 3339 espera, enquanto -07:00 imprime sempre o número. Nas frações de segundo, .000 mantém os zeros finais e .999 remove-os. Os nomes dos meses e dos dias da semana estão sempre em inglês.
Como funcionam a pré-visualização e a conversão
A pré-visualização é gerada pelo próprio time.Format do Go, compilado para WebAssembly e executado no seu navegador, por isso mostra o que um programa Go imprime para o mesmo momento e desvio. O seu navegador fornece a hora atual, o desvio UTC do seu fuso horário e a respetiva abreviatura. Quando o navegador não tem abreviatura para o seu fuso, é usada uma numérica como +03, que é também o que o Go imprime para fusos que não têm letras próprias. Em alguns fusos, a abreviatura do navegador difere da que consta da base de dados de fusos horários que o Go lê.
Os dois formatos não cobrem as mesmas coisas. O strftime não tem nenhuma diretiva que se comporte como Z07:00, e o Go não tem tokens para o número da semana (%U, %W, %V), para o dia da semana em número (%u, %w) nem para os segundos desde a epoch (%s). O conversor copia essas partes sem alterações e indica-as por baixo do campo. Também indica o texto literal de um formato strftime que o Go leria como token, porque um layout não o consegue conter.
Algumas diretivas do lado do strftime são extensões que nem todas as implementações têm: a flag que remove o preenchimento (%-d), o desvio com dois pontos (%:z) e as diretivas de fração %L, %f e %N. Consulte a documentação da linguagem para a qual está a converter.