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.
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()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.