Trabalho com datas em Go (Golang): bibliotecas time, carbon e now

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

Trabalho com datas em Go (Golang): visão geral das bibliotecas



Trabalhar com datas e horas é uma das tarefas principais em qualquer linguagem de programação. Em Go (Golang), a biblioteca padrão fornece um pacote poderoso time, mas às vezes, por conveniência, os desenvolvedores recorrem a bibliotecas de terceiros. Neste artigo, vamos explorar os principais recursos do pacote padrão e analisar duas bibliotecas populares: carbon e now.



1. Pacote padrão time



O pacote time é a base para trabalhar com datas em Go. Ele inclui os tipos Time, Duration, funções para parsing, formatação, trabalho com timers e fusos horários.



Criação e formatação de data



package main

import ( "fmt" "time")

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

// Criação de uma data específica date := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("Data específica:", date)

// Formatação (obrigatório "2006-01-02 15:04:05" como referência) fmt.Println("Formato:", date.Format("02.01.2006 15:04:05"))}


Parsing de string para data



func main() {    // Parsing com especificação do formato    str := "2025-03-15 14:30:00"    parsed, err := time.Parse("2006-01-02 15:04:05", str)    if err != nil {        panic(err)    }    fmt.Println("Parseado:", parsed)}


Trabalho com fusos horários



func main() {    loc, _ := time.LoadLocation("Europe/Moscow")    moscowTime := time.Now().In(loc)    fmt.Println("Horário de Moscou:", moscowTime)}


Diferença entre datas



func main() {    start := time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC)    end := time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC)    duration := end.Sub(start)    fmt.Printf("Diferença: %v (horas: %v)", duration, duration.Hours())}


2. Biblioteca carbon



A biblioteca carbon (github.com/golang-module/carbon) é um port da popular biblioteca PHP Carbon para Go. Ela fornece uma interface fluente conveniente para trabalhar com datas.



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("Agora:", now.ToString())

// Criação de data date := carbon.Parse("2025-03-15 14:30:00") fmt.Println("Parseado:", date.ToDateString())

// Adição de dias future := carbon.Now().AddDays(10) fmt.Println("Daqui a 10 dias:", future.ToDateString())

// Diferença em dias diff := carbon.Now().DiffInDays(carbon.Parse("2025-12-31")) fmt.Printf("Até o Ano Novo: %d dias", diff)

// Formatação fmt.Println("Formato personalizado:", carbon.Now().Format("d/m/Y H:i:s"))}


Métodos úteis



  • StartOfDay() / EndOfDay() — início/fim do dia
  • IsWeekend() / IsWeekday() — verificação do dia da semana
  • Age() — idade a partir da data de nascimento
  • DiffForHumans() — diferença legível para humanos (exemplo: "3 dias atrás")


3. Biblioteca now



A biblioteca now (github.com/jinzhu/now) do criador do GORM é uma utilidade leve para obter o início e o fim de períodos de tempo.



Instalação



go get github.com/jinzhu/now


Exemplos de uso



package main

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

func main() { // Início do dia beginningOfDay := now.BeginningOfDay() fmt.Println("

Recommendations