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.
package main
import "time"
func main() {
ts := time.Now().Unix()
}time.Now().UnixMilli()time.Now().UnixNano()import "time"
t := time.Unix(1700000000, 0)
t.UTC() // ensure UTCimport "time"
t := time.Unix(1700000000, 0)
t.Format(time.RFC3339) // "2023-11-15T06:13:20Z"
t.Format("2006-01-02 15:04:05") // custom layoutimport "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.