Pular para o conteúdo principal

victorstein.dev

22/100 Dias de Golang - Biblioteca “time”

Table of Contents

# Biblioteca “time”

Já usamos em vários exemplos essa biblioteca, usando para o famose sleep. Agora vamos dar uma olhada mais a fundo nela. Já vamos começar com a mais clásica de todas, pegar o horário atual

package main

import (
	"fmt"
	"time"
)

func main() {

	now := time.Now()

	fmt.Println(now)
}

Se você executar esse programa, verá uma saída nesse format:

2025-04-03 21:31:41.020649931 -0300 -03 m=+0.000047023

Perceba que o timezone vem no fomato -0300 e no formato abreviado -03. O diferente é o retorno do m=+0.000047023. Esse campo aparece quando imprimimos diretamente um time.Time. Esse valor é conhecido como “monotonic clock reading”, ou tempo monotônico, e serve para ajudar o Go a fazer medições de tempo com alta precisão. m=+0.000058133 quer dizer que o Go registrou esse momento como sendo +58.133 microssegundos desde um ponto de referência interno. Ele serve para medir duração entre eventos, como timers, benchmarks, e medições de performance.

Agora vamos acessar, o ano, mês, dia, hora, … da variável now:

fmt.Println("Ano:", now.Year())
fmt.Println("Mês:", now.Month())
fmt.Println("Dia:", now.Day())
fmt.Println("Hora:", now.Hour())
Ano: 2025
Mês: April
Dia: 3
Hora: 21

Vamos formatar o now para o padrão Dia/Mês/Ano Hora:Minuto:Segundo

formatado := now.Format("02/01/2006 15:04:05")
fmt.Println("Data formatada:", formatado)

Veja que usei um formato específico ali no Format(). A formatação de datas no Go é realmente diferente da maioria das linguagens! Em vez de usar códigos tradicionais como “YYYY-MM-DD” ou “HH:mm:ss”, o Go usa um exemplo fixo de data e hora:

Mon Jan 2 15:04:05 MST 2006

Isso significa que para formatar ou fazer parsing de datas, você precisa usar esse exato conjunto de números e palavras para representar os componentes de tempo. Muito louco isso. Veja a ordem:

 1  → Mês (Janeiro)
 2  → Dia do mês
 3  → Hora (formato 12h)
 4  → Minuto
 5  → Segundo
 6  → Ano (2006)
-7  → Fuso horário (MST, UTC-7)
 15 → Hora no formato 24h 

Isso significa que se eu quiser escrever uma data no padrão DD/MM/YYYY, preciso passar para o format: 02/01/2006. Veja como fica o exemplo de receber um string de uma data e fazer o parse para um time.Time:

dataStr := "03/04/2025 21:00:00"
data, err := time.Parse("02/01/2006 15:04:05", dataStr)
if err != nil {
    fmt.Println("Erro ao converter a data:", err)
}
fmt.Println("Data convertida:", data)

# Diferença entre datas:

Vamos descobrir a diferença entre dois segundos…rsrs

inicio := time.Now()
time.Sleep(2 * time.Second)
fim := time.Now()

duracao := fim.Sub(inicio)
fmt.Println("Duração:", duracao) 
Duração: 2.001073493s

Podemos somar valores também:

amanha := now.Add(24 * time.Hour)
ontem := now.Add(-24 * time.Hour)

Para quem vem do Python, bem parecido com o modelo da biblioteca pendulum. Existem várias outras coisas para vermos nessa biblioteca.