Trabalhando com datas e horas em Go: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com Datas e Horários em Go: do Básico às Técnicas Avançadas

A linguagem de programação Go (Golang) oferece um pacote time poderoso e intuitivo para trabalhar com datas e horários. Ao contrário de muitas outras linguagens, Go usa uma abordagem única para formatação, baseada em uma data de referência (Mon Jan 2 15:04:05 MST 2006). Neste artigo, vamos detalhar todos os aspectos principais: desde a criação de objetos de tempo até o trabalho com temporizadores e fusos horários. O material será útil tanto para iniciantes quanto para desenvolvedores experientes que estão migrando para Go.



1. Fundamentos: criação, obtenção e exibição de horários

O tipo central para trabalhar é time.Time. Obtenha o momento atual com time.Now(). Para criar uma data específica, use time.Date().



package main

import ( "fmt" "time")

func main() { // Horário atual now := time.Now() fmt.Println("Agora:", now)

// Criando uma data específica (ano, mês, dia, hora, min, seg, nanoseg, Location) specific := time.Date(2025, time.January, 15, 10, 30, 0, 0, time.UTC) fmt.Println("Data específica:", specific)

// Extraindo componentes fmt.Println("Ano:", now.Year()) fmt.Println("Mês:", now.Month()) fmt.Println("Dia:", now.Day()) fmt.Println("Hora:", now.Hour()) fmt.Println("Minuto:", now.Minute()) fmt.Println("Segundo:", now.Second()) fmt.Println("Dia da semana:", now.Weekday())}


A saída do programa mostrará o horário atual e seus componentes. Observe: time.Now() retorna o horário no fuso horário local do sistema.



2. Formatação e parsing: a característica distintiva do Go

Em Go, a formatação de datas não ocorre através de caracteres como YYYY-MM-DD, mas sim através de uma data de referência: Mon Jan 2 15:04:05 MST 2006 (ou 01/02 03:04:05PM '06 -0700). Lembre-se desta string mágica — ela se parece com 1 2 3 4 5 6 -7.



  • 1 — mês (01, Jan, January)
  • 2 — dia (02, 2)
  • 3 — hora no formato de 12 horas (03, 3)
  • 4 — minuto (04, 4)
  • 5 — segundo (05, 5)
  • 6 — ano (06, 2006)
  • -7 — fuso horário (MST, -0700, -07:00)


Formatação (Time → String)

now := time.Now()

// Formatos padrãofmt.Println(now.Format("2006-01-02 15:04:05")) // 2025-01-15 10:30:45fmt.Println(now.Format("02.01.2006")) // 15.01.2025fmt.Println(now.Format(time.RFC3339)) // 2025-01-15T10:30:45Zfmt.Println(now.Format("Mon, 02 Jan 2006 15:04:05 MST")) // Wed, 15 Jan 2025 10:30:45 UTC


Parsing (String → Time)

// Fazendo parsing de uma string para time.TimedateStr := "2025-01-15 10:30:45"layout := "2006-01-02 15:04:05"parsedTime, err := time.Parse(layout, dateStr)if err != nil {    panic(err)}fmt.Println("Parseado:", parsedTime)

// Parsing com fuso horáriodateWithZone := "2025-01-15T10:30:45+03:00"parsedWithZone, _ := time.Parse(time.RFC3339, dateWithZone)fmt.Println("Com fuso:", parsedWithZone)


Se você precisar fazer parsing de uma data em um fuso horário específico, use time.ParseInLocation().



3. Operações com datas: Duration, Add, Sub e comparação

O tipo time.Duration representa um intervalo de tempo. Go fornece constantes: Nanosecond, Microsecond, Millisecond, Second, Minute, Hour.



now := time.Now()

// Adicionando tempofuture := now.Add(72 * time.Hour) // +3 diasfmt.Println("Daqui a 72 horas:", future)

// Subtraindo tempopast := now.Add(-30 * time.Minute) // 30 minutos atrásfmt.P

Blogs

Book Recommendations