MiServe DevTools

Tus pegatinas

Fija aquí tus herramientas. Se guardan en este navegador.

Conversor de formatos de hora de Go y strftime

Escribe un layout de hora de Go y ve la hora actual con ese formato, convierte entre layouts de Go y strftime, y consulta los tokens de la hora de referencia.

Edita cualquiera de los dos campos y el otro se actualiza.

La hora actual con este layout

Layouts predefinidos
Tokens de la hora de referencia

La hora de referencia de Go es Mon Jan 2 15:04:05 MST 2006. Escrita como 01/02 03:04:05PM '06 -0700, sus partes van de 1 a 7: mes, día, hora, minuto, segundo, año y desfase de zona. Selecciona un token para insertarlo en el layout, en la posición del cursor.

Token de GoSignificadostrftimeAhora
Año, cuatro dígitos %Y
Año, dos últimos dígitos %y
Mes en número, dos dígitos %m
Mes en número, sin cero inicial %-m
Nombre del mes, abreviado %b
Nombre del mes, completo %B
Día del mes, dos dígitos %d
Día del mes, sin cero inicial %-d
Día del mes, rellenado con un espacio %e
Día del año, tres dígitos %j
Hora en formato de 24 horas, dos dígitos %H
Hora en formato de 12 horas, dos dígitos %I
Hora en formato de 12 horas, sin cero inicial %-I
Minuto, dos dígitos %M
Segundo, dos dígitos %S
AM o PM %p
Nombre del día de la semana, abreviado %a
Nombre del día de la semana, completo %A
Abreviatura de la zona horaria %Z
Desfase UTC en horas y minutos, sin dos puntos %z
Desfase UTC en horas y minutos, con dos puntos %:z
Desfase UTC con dos puntos, o la letra Z cuando el desfase es cero —
Fracción de segundo con un número fijo de dígitos, uno por cada cero .%L
Fracción de segundo sin ceros finales, como máximo un dígito por cada nueve —

Funciona en tu navegador con WebAssembly. Nada de lo que pegas se sube.

Acerca de esta herramienta

Un layout es un ejemplo, no un patrón

La mayoría de los lenguajes describen un formato de fecha con marcadores como %Y-%m-%d o YYYY-MM-DD. Go lo hace de otra manera: escribes cómo debe verse un instante concreto, la hora de referencia, y time.Format imprime cualquier otra hora de la misma forma. La hora de referencia es Mon Jan 2 15:04:05 MST 2006.

Los valores se eligieron para que vayan en orden ascendente cuando se escriben en el orden estadounidense 01/02 03:04:05PM '06 -0700: mes 1, día 2, hora 3 (o 15 en formato de 24 horas), minuto 4, segundo 5, año 6 y un desfase de zona de menos 7 horas. Cada valor solo puede representar una cosa, y así es como Go sabe que 01 es un mes y 04 un minuto.

Errores frecuentes

Como 01 es el mes y 02 el día, una fecha con el día delante es 02/01/2006, algo que parece un error a cualquiera acostumbrado al orden de referencia. Un layout escrito con otros hábitos tampoco da error. Go imprime como texto literal lo que no reconoce, así que YYYY-MM-DD sale tal cual, y lee como token cada dígito que sí reconoce, así que 2021-12-25 sale como una serie de números sin relación.

No hay forma de escapar un token. El texto que por casualidad contiene uno se sustituye, así que un Jan o un Mon literal, o un dígito como 2, se convierte en un valor dentro del layout. Añade ese texto fuera del layout.

Z07:00 imprime Z para UTC y un desfase numérico en los demás casos, que es lo que espera la RFC 3339, mientras que -07:00 siempre imprime el número. En las fracciones de segundo, .000 conserva los ceros finales y .999 los elimina. Los nombres de los meses y de los días de la semana siempre están en inglés.

Cómo funcionan la vista previa y la conversión

La vista previa la genera el propio time.Format de Go, compilado a WebAssembly y ejecutado en tu navegador, así que muestra lo que imprime un programa en Go para el mismo instante y el mismo desfase. Tu navegador proporciona la hora actual, el desfase UTC de tu zona horaria y su abreviatura. Cuando el navegador no tiene abreviatura para tu zona, se usa una numérica como +03, que es también lo que imprime Go para las zonas sin letras propias. En algunas zonas, la abreviatura del navegador no coincide con la de la base de datos de zonas horarias que lee Go.

Los dos formatos no cubren lo mismo. strftime no tiene ninguna directiva que se comporte como Z07:00, y Go no tiene token para los números de semana (%U, %W, %V), para el día de la semana en número (%u, %w) ni para los segundos desde el epoch (%s). El conversor copia esas partes sin cambios y las indica debajo del campo. También indica el texto literal de un formato strftime que Go leería como token, porque un layout no puede contenerlo.

Algunas directivas de strftime son extensiones que no todas las implementaciones tienen: el modificador que quita el relleno (%-d), el desfase con dos puntos (%:z) y las directivas de fracción %L, %f y %N. Consulta la documentación del lenguaje al que conviertes.

Preguntas

¿Por qué Go usa 2006-01-02 15:04:05 en lugar de YYYY-MM-DD?

Los layouts de Go muestran cómo debe imprimirse una hora de referencia fija, Mon Jan 2 15:04:05 MST 2006. Sus partes son los números del 1 al 7 en el orden mes, día, hora, minuto, segundo, año y desfase de zona, así que cada número identifica una parte de la fecha sin necesidad de ninguna sintaxis de marcadores.

¿Cuál es el layout de Go para un timestamp ISO 8601 o RFC 3339?

Usa 2006-01-02T15:04:05Z07:00, que es la constante time.RFC3339. Para fracciones de segundo usa time.RFC3339Nano, que es 2006-01-02T15:04:05.999999999Z07:00.

¿Cómo imprimo milisegundos en un layout de Go?

Añade .000 después de los segundos, como en 15:04:05.000. Cada cero es un dígito, así que .000000 da microsegundos. Usa nueves en su lugar, como en .999, para quitar los ceros finales.

¿Cómo uso el formato de 24 horas en un layout de Go?

Escribe la hora como 15. Los valores 03 y 3 corresponden al formato de 12 horas y normalmente se combinan con PM, que imprime AM o PM.

Más herramientas de Tiempo