Generar el timestamp actual
Estos tres valores corresponden al mismo instante:
now := time.Now()
fmt.Println(now.Unix()) // segundos
fmt.Println(now.UnixMilli()) // milisegundos
fmt.Println(now.UnixNano()) // nanosegundosColoca este fragmento dentro de main, con las importaciones fmt y time del programa siguiente.
Convertir segundos o milisegundos
En Go 1.17 o posterior, utiliza time.Unix para segundos y time.UnixMilli para milisegundos. Este programa completo produce el mismo instante con ambas unidades.
package main
import (
"fmt"
"time"
)
func main() {
seconds := int64(1711972800)
milliseconds := int64(1711972800000)
date := time.Unix(seconds, 0).UTC()
sameDate := time.UnixMilli(milliseconds).UTC()
fmt.Println(date.Format(time.RFC3339)) // 2024-04-01T12:00:00Z
fmt.Println(date.Equal(sameDate)) // true
fmt.Println(date.Unix()) // 1711972800
fmt.Println(date.UnixMilli()) // 1711972800000
}Para el instante actual: time.Now().Unix() o time.Now().UnixMilli(). La zona horaria no cambia estos números.
Formatear con la fecha de referencia de Go
El patrón utiliza los componentes del 2 de enero de 2006 a las 15:04:05: 2006 representa el año, 01 el mes y 02 el día. Este fragmento reutiliza date del ejemplo anterior.
fmt.Println(date.Format("02/01/2006 15:04:05"))
// 01/04/2024 12:00:00Interpretar una fecha con su desfase UTC
parsed, err := time.Parse(time.RFC3339, "2024-04-01T14:00:00+02:00")
if err != nil {
panic(err) // En una API, devuelve un error de validación.
}
fmt.Println(parsed.Unix()) // 1711972800Un desfase de +02:00 no describe los cambios estacionales de hora de París. Para mostrar una zona horaria geográfica, carga su ubicación y gestiona los posibles errores.
paris, err := time.LoadLocation("Europe/Paris")
if err != nil {
panic(err)
}
fmt.Println(parsed.In(paris).Format(time.RFC3339))
// 2024-04-01T14:00:00+02:00Fechas negativas, precisión y duraciones
time.Unix(-1, 0).UTC() representa el 31 de diciembre de 1969 a las 23:59:59 UTC. Evita los números de coma flotante al transportar nanosegundos. UnixNano() no cubre todas las fechas representables por time.Time: su rango está limitado por un entero de 64 bits con signo.
Para cronometrar una operación, conserva start := time.Now() y después utiliza time.Since(start), en lugar de restar dos timestamps serializados.
Probar un valor y profundizar
Pega tus resultados en el Conversor Unix, comprueba las unidades y la precisión o compara con la conversión en Rust.
Referencias oficiales
Go — paquete time y relojes monótonos · Format y la fecha de referencia · Límites de UnixNano
Versión en español publicada el 26 de septiembre de 2026.