MiServe DevTools

Os seus autocolantes

Fixe aqui as ferramentas. Ficam guardadas neste navegador.

Conversor de formatos de hora Go e strftime

Escreva um layout de hora Go e veja a hora atual formatada com ele, converta entre layouts Go e strftime, e consulte os tokens da hora de referência.

Edite qualquer um dos campos e o outro acompanha.

A hora atual neste layout

Layouts com nome
Tokens da hora de referência

A hora de referência do Go é Mon Jan 2 15:04:05 MST 2006. Escrita como 01/02 03:04:05PM '06 -0700, as suas partes contam de 1 a 7: mês, dia, hora, minuto, segundo, ano e desvio do fuso. Selecione um token para o inserir no layout, na posição do cursor.

Token GoSignificadostrftimeAgora
Ano, quatro dígitos %Y
Ano, dois últimos dígitos %y
Mês em número, dois dígitos %m
Mês em número, sem zero à esquerda %-m
Nome do mês, abreviado %b
Nome do mês, por extenso %B
Dia do mês, dois dígitos %d
Dia do mês, sem zero à esquerda %-d
Dia do mês, preenchido com um espaço %e
Dia do ano, três dígitos %j
Hora no formato de 24 horas, dois dígitos %H
Hora no formato de 12 horas, dois dígitos %I
Hora no formato de 12 horas, sem zero à esquerda %-I
Minuto, dois dígitos %M
Segundo, dois dígitos %S
AM ou PM %p
Nome do dia da semana, abreviado %a
Nome do dia da semana, por extenso %A
Abreviatura do fuso horário %Z
Desvio UTC em horas e minutos, sem dois pontos %z
Desvio UTC em horas e minutos, com dois pontos %:z
Desvio UTC com dois pontos, ou a letra Z quando o desvio é zero —
Fração de segundo com um número fixo de dígitos, um por cada zero .%L
Fração de segundo sem zeros finais, no máximo um dígito por cada nove —

Funciona no seu navegador com WebAssembly. Nada do que cola é enviado.

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.

Perguntas

Porque é que o Go usa 2006-01-02 15:04:05 em vez de YYYY-MM-DD?

Os layouts Go mostram como deve ser impressa uma hora de referência fixa, Mon Jan 2 15:04:05 MST 2006. As suas partes são os números de 1 a 7, pela ordem mês, dia, hora, minuto, segundo, ano e desvio do fuso, por isso cada número identifica uma parte da data sem qualquer sintaxe de marcadores.

Qual é o layout Go para um timestamp ISO 8601 ou RFC 3339?

Use 2006-01-02T15:04:05Z07:00, que é a constante time.RFC3339. Para frações de segundo, use time.RFC3339Nano, que é 2006-01-02T15:04:05.999999999Z07:00.

Como imprimo milissegundos num layout Go?

Acrescente .000 depois dos segundos, como em 15:04:05.000. Cada zero é um dígito, por isso .000000 dá microssegundos. Use noves, como em .999, para eliminar os zeros finais.

Como obtenho o formato de 24 horas num layout Go?

Escreva a hora como 15. Os valores 03 e 3 correspondem ao formato de 12 horas e são normalmente combinados com PM, que imprime AM ou PM.

Mais ferramentas de Tempo