Go Snippets

Trechos de timestamp Unix em Go

Exemplos de Go para segundos, milissegundos e nanossegundos Unix, conversão de timestamps para time.Time e formatação com RFC3339 ou 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()

Noções básicas de marcas de tempo em Go

O pacote time do Go tem auxiliares diretos para segundos, milissegundos e nanossegundos Unix. Use time.Now().Unix() para segundos e time.Now().UnixMilli() para milissegundos compatíveis com JavaScript.

Formatando valores time.Time

Use time.Unix(seconds, 0) para criar um time.Time a partir de segundos Unix e depois chame UTC() quando quiser uma saída determinística. RFC3339 costuma ser o melhor formato de string para respostas de API.

Notas de produção para Go

O time.Time do Go carrega uma localização, mas marcas de tempo Unix sempre representam um único instante UTC. Normalize as marcas de tempo nos limites de API e banco de dados e depois formate com uma localização explícita quando um usuário ou regra de negócio precisar da hora local. Isso mantém as comparações simples e evita que as configurações locais do servidor mudem a saída.

  • Use time.Now().Unix() para segundos Unix em logs, filas e campos de banco de dados
  • Use time.Now().UnixMilli() para valores compatíveis com JavaScript
  • Use time.Unix(seconds, 0).UTC() antes de formatar strings determinísticas
  • Use time.RFC3339 ou time.RFC3339Nano para respostas de API

FAQ

Devo armazenar time.Time ou segundos Unix?
Use time.Time dentro do Go quando precisar de operações de calendário. Armazene segundos Unix ou um tipo de marca de tempo de banco de dados quando o valor precisar ser indexado, consultado ou compartilhado com outros sistemas.
Que unidade time.Unix espera?
time.Unix espera segundos e nanossegundos como argumentos separados. Se você receber milissegundos, divida ou converta o valor antes de chamar time.Unix.
Como verifico a saída do Go?
Formate o valor com t.UTC().Format(time.RFC3339) e compare-o com a marca de tempo esperada pela API, fila ou coluna de banco de dados na qual você está escrevendo.