Go Snippets

Fragmentos de timestamp Unix en Go

Ejemplos de Go para segundos, milisegundos y nanosegundos Unix, conversión de timestamps a time.Time y formateo con RFC3339 o layouts personalizados.

Current Unix timestamp (seconds)
package main

import "time"

func main() {
    ts := time.Now().Unix()
}
Current Unix timestamp (milliseconds)
time.Now().UnixMilli()
Current Unix timestamp (nanoseconds)
time.Now().UnixNano()
time.Time from Unix timestamp
import "time"

t := time.Unix(1700000000, 0)
t.UTC()  // ensure UTC
Formatted string
import "time"

t := time.Unix(1700000000, 0)
t.Format(time.RFC3339)          // "2023-11-15T06:13:20Z"
t.Format("2006-01-02 15:04:05") // custom layout
Timestamp from time.Time
import "time"

t, _ := time.Parse(time.RFC3339, "2023-11-15T06:13:20Z")
t.Unix()

Conceptos básicos de marcas de tiempo en Go

El paquete time de Go tiene ayudantes directos para segundos, milisegundos y nanosegundos Unix. Usa time.Now().Unix() para segundos y time.Now().UnixMilli() para milisegundos compatibles con JavaScript.

Formatear valores time.Time

Usa time.Unix(seconds, 0) para crear un time.Time a partir de segundos Unix y luego llama a UTC() cuando quieras una salida determinista. RFC3339 suele ser el mejor formato de cadena para respuestas de API.

Notas de producción para Go

El time.Time de Go lleva una ubicación, pero las marcas de tiempo Unix siempre representan un único instante UTC. Normaliza las marcas de tiempo en los límites de API y base de datos, y luego formatea con una ubicación explícita cuando un usuario o regla de negocio necesite la hora local. Esto mantiene las comparaciones simples y evita que la configuración local del servidor cambie la salida.

  • Usa time.Now().Unix() para segundos Unix en registros, colas y campos de base de datos
  • Usa time.Now().UnixMilli() para valores compatibles con JavaScript
  • Usa time.Unix(seconds, 0).UTC() antes de formatear cadenas deterministas
  • Usa time.RFC3339 o time.RFC3339Nano para respuestas de API

FAQ

¿Debería almacenar time.Time o segundos Unix?
Usa time.Time dentro de Go cuando necesites operaciones de calendario. Almacena segundos Unix o un tipo de marca de tiempo de base de datos cuando el valor deba indexarse, consultarse o compartirse con otros sistemas.
¿Qué unidad espera time.Unix?
time.Unix espera segundos y nanosegundos como argumentos separados. Si recibes milisegundos, divide o convierte el valor antes de llamar a time.Unix.
¿Cómo verifico la salida de Go?
Formatea el valor con t.UTC().Format(time.RFC3339) y compáralo con la marca de tiempo que espera la API, la cola o la columna de base de datos en la que estás escribiendo.