Trabalho com datas em Go (Golang): visão completa das bibliotecas
Trabalhar com datas e horas é uma das tarefas mais comuns no desenvolvimento web, análise e backend. Em Go (Golang), a biblioteca padrão time fornece um conjunto de ferramentas poderoso, mas nem sempre intuitivo. Para simplificar o desenvolvimento, existem várias bibliotecas de terceiros. Neste artigo, vamos detalhar as principais abordagens e bibliotecas populares para trabalhar com datas em Go.
1. Pacote padrão time
O pacote time é a base para trabalhar com datas e horas em Go. Ele inclui os tipos Time, Duration, Location e funções para formatação, parsing e aritmética.
Principais funcionalidades:
- Hora atual:
time.Now() - Formatação: método
.Format(layout string)— usa o formato de referência especialMon Jan 2 15:04:05 MST 2006(Go nasceu em 2006). - Parsing: função
time.Parse(layout, value string). - Aritmética: métodos
.Add(d Duration),.Sub(t Time),.AddDate(y, m, d int). - Fusos horários:
time.LoadLocation(name string)e método.In(loc *Location).
package main
import ( "fmt" "time")
func main() { // Hora atual now := time.Now() fmt.Println("Agora:", now)
// Formatação fmt.Println("Formato RFC3339:", now.Format(time.RFC3339)) fmt.Println("Formato personalizado:", now.Format("02.01.2006 15:04:05"))
// Parsing de string parsed, _ := time.Parse("2006-01-02", "2024-03-15") fmt.Println("Parseado:", parsed)
// Trabalho com fusos horários loc, _ := time.LoadLocation("Europe/Moscow") moscowTime := now.In(loc) fmt.Println("Horário em Moscou:", moscowTime)
// Aritmética tomorrow := now.AddDate(0, 0, 1) fmt.Println("Amanhã:", tomorrow.Format("02.01.2006"))}Particularidade: Go usa um formato de referência único (2006-01-02T15:04:05Z07:00), em vez do habitual YYYY-MM-DD. Isso exige adaptação, mas elimina ambiguidades.
2. Biblioteca carbon (análoga ao Carbon para PHP)
A biblioteca carbon é uma adaptação da popular biblioteca PHP Carbon. Ela fornece uma interface fluente conveniente para trabalhar com datas.
Instalação:
go get github.com/golang-module/carbon/v2Exemplos de uso:
package main
import ( "fmt" "github.com/golang-module/carbon/v2")
func main() { // Data atual now := carbon.Now() fmt.Println("Agora:", now.ToDateTimeString())
// Criação de data date := carbon.CreateFromDate(2024, 3, 15) fmt.Println("Data:", date.ToDateString())
// Diferença entre datas start := carbon.Parse("2024-01-01") end := carbon.Parse("2024-03-15") diff := start.DiffInDays(end) fmt.Printf("Dias entre: %d", diff)
// Formatos legíveis fmt.Println("Ontem:", carbon.Yesterday().ToDateString()) fmt.Println("Amanhã:", carbon.Tomorrow().ToDateString())
// Verificações fmt.Println("Agora é fim de semana?", now.IsWeekend()) fmt.Println("Agora é manhã?", now.IsMorning())}Vantagens: API simples, suporte a caracteres chineses, localização, métodos para trabalhar com início/fim do dia, semana, mês.
3. Biblioteca now (ferramenta minimalista)
A biblioteca now do autor do GORM é uma ferramenta leve para calcular o início e o fim de períodos de tempo.