Trabalho com datas em Go (Golang): visão geral das bibliotecas para parsing, formatação e manipulações

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 em Go (Golang): bibliotecas e ferramentas



A linguagem Go (Golang) oferece uma poderosa biblioteca padrão time, que cobre a maioria das tarefas de trabalho com datas e horários. No entanto, para operações complexas, como parsing de formatos não padronizados, trabalho com datas relativas ou cálculos com calendários comerciais, a comunidade criou uma série de bibliotecas úteis. Neste artigo, veremos tanto os recursos nativos do Go quanto os melhores pacotes de terceiros para trabalhar com datas.



1. Biblioteca nativa time



A biblioteca padrão time é a base para qualquer operação com datas em Go. Ela fornece:

  • Tipos Time, Duration, Location
  • Funções para obter a hora atual, criar datas, fazer parsing e formatação
  • Suporte a fusos horários e relógios monotônicos


Obtendo a hora atual

package main

import ( "fmt" "time")

func main() { now := time.Now() fmt.Println("Hora atual:", now) fmt.Println("Ano:", now.Year()) fmt.Println("Mês:", now.Month()) fmt.Println("Dia:", now.Day())}


Formatação de datas

Em Go, é usado um formato de referência especial: Mon Jan 2 15:04:05 MST 2006 (1,2,3,4,5,6 — dígitos em ordem crescente).

now := time.Now()fmt.Println(now.Format("2006-01-02 15:04:05"))   // 2025-03-15 14:30:00fmt.Println(now.Format("02 Jan 2006"))           // 15 Mar 2025fmt.Println(now.Format(time.RFC3339))            // 2025-03-15T14:30:00Z


Parsing de strings

dateStr := "2025-03-15 14:30:00"t, err := time.Parse("2006-01-02 15:04:05", dateStr)if err != nil {    panic(err)}fmt.Println(t) // 2025-03-15 14:30:00 +0000 UTC


Trabalhando com fusos horários

loc, _ := time.LoadLocation("Europe/Moscow")moscowTime := time.Now().In(loc)fmt.Println("Horário de Moscou:", moscowTime.Format("15:04:05"))


2. Biblioteca carbon



O pacote github.com/golang-module/carbon é um equivalente em Go da popular biblioteca PHP Carbon. Ele fornece uma API conveniente para trabalhar com datas, incluindo datas relativas, formatos legíveis por humanos e chamadas encadeadas.



Instalação

go get github.com/golang-module/carbon/v2


Exemplos de uso

package main

import ( "fmt" "github.com/golang-module/carbon/v2")

func main() { // Data atual now := carbon.Now() fmt.Println(now.ToDateString()) // 2025-03-15

// Datas relativas fmt.Println(now.AddDays(7).ToDateString()) // 2025-03-22 fmt.Println(now.SubMonths(1).ToDateString()) // 2025-02-15 fmt.Println(now.StartOfMonth().ToDateString()) // 2025-03-01 fmt.Println(now.EndOfMonth().ToDateString()) // 2025-03-31

// Formatos legíveis por humanos fmt.Println(now.DiffForHumans()) // 刚刚 (agora mesmo)

// Parsing com suporte a múltiplos formatos t := carbon.Parse("2025-03-15 14:30:00") fmt.Println(t.ToDateTimeString()) // 2025-03-15 14:30:00

// Trabalhando com fusos horários cst := carbon.Now(carbon.NewYork) fmt.Println(cst.ToDateTimeString()) // horário em Nova York}


3. Biblioteca now



O pacote github.com/jinzhu/now (do autor do GORM) fornece funções convenientes para obter o início e o fim de períodos de tempo.



Instalação

go get github.com/jinzhu/now


Exemplos

package main

import ( "fmt" "github.com/jinzhu/now" "time")

func main() { t := time.Now() fmt.Println(now.BeginningOfMonth(t)) // 2025-03-01 00:00:00 fmt.Println(now.EndOfMonth(t)) // 2025-03-31 23:59:59 fmt.Println(now.BeginningOfYear(t))

Recommendations