Fundamentos do pacote time
Trabalhe com horários, durações e formatação
Fundamentos do pacote time é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.
time.Time — O tipo central
O tipo central do pacote time é time.Time. Obtenha a hora atual com time.Now():
package main
import ("fmt"; "time")
func main() {
now := time.Now()
fmt.Println(now) // 2024-01-15 10:30:00.123456789 +0000 UTC
fmt.Println(now.Year()) // 2024
fmt.Println(now.Month()) // January
fmt.Println(now.Day()) // 15
fmt.Println(now.Hour()) // 10
fmt.Println(now.Minute()) // 30
fmt.Println(now.Weekday()) // Monday
}time.Duration
time.Duration representa o tempo decorrido em nanossegundos. Use constantes tipadas para facilitar a leitura:
package main
import ("fmt"; "time")
func main() {
d := 2*time.Hour + 30*time.Minute + 15*time.Second
fmt.Println(d) // 2h30m15s
fmt.Println(d.Hours()) // 2.504166...
fmt.Println(d.Minutes()) // 150.25
fmt.Println(d.Seconds()) // 9015
fmt.Println(d.Milliseconds()) // 9015000
}time.Add e time.Sub
Adicione uma duração a um instante ou subtraia dois instantes para obter uma duração:
package main
import ("fmt"; "time")
func main() {
now := time.Now()
tomorrow := now.Add(24 * time.Hour)
fmt.Println(tomorrow.Format("2006-01-02"))
deadline := now.Add(30 * time.Minute)
remaining := time.Until(deadline) // alias for deadline.Sub(now)
fmt.Printf("%.0f minutes left\n", remaining.Minutes())
}Formatação e análise de horários
Go usa um horário de referência, Mon Jan 2 15:04:05 MST 2006, como modelo de formatação (os valores de 1 a 7 na ordem):
package main
import ("fmt"; "time")
func main() {
now := time.Now()
// Format
fmt.Println(now.Format("2006-01-02")) // 2024-01-15
fmt.Println(now.Format("02/01/2006 15:04:05")) // 15/01/2024 10:30:00
fmt.Println(now.Format(time.RFC3339)) // 2024-01-15T10:30:00Z
fmt.Println(now.Format(time.Kitchen)) // 10:30AM
}time.Parse — Análise de cadeias de caracteres
Analise uma cadeia de caracteres em um time.Time usando o mesmo modelo de referência:
package main
import ("fmt"; "time")
func main() {
s := "2024-01-15"
t, err := time.Parse("2006-01-02", s)
if err != nil {
fmt.Println("parse error:", err)
return
}
fmt.Println(t.Year(), t.Month(), t.Day()) // 2024 January 15
// Parse RFC3339 (ISO 8601):
t2, _ := time.Parse(time.RFC3339, "2024-01-15T10:30:00Z")
fmt.Println(t2)
}time.Sleep e temporizadores
Pause a execução com time.Sleep; crie temporizadores de execução única com time.NewTimer:
package main
import ("fmt"; "time")
func main() {
start := time.Now()
time.Sleep(100 * time.Millisecond)
fmt.Printf("slept for %v\n", time.Since(start))
// One-shot timer
timer := time.NewTimer(200 * time.Millisecond)
<-timer.C // blocks until timer fires
fmt.Println("timer fired")
}time.Ticker para eventos repetidos
time.NewTicker envia dados pelo canal em intervalos regulares:
package main
import ("fmt"; "time")
func main() {
ticker := time.NewTicker(500 * time.Millisecond)
defer ticker.Stop() // always stop to avoid goroutine leak
for i := 0; i < 3; i++ {
t := <-ticker.C
fmt.Println("tick at", t.Format("15:04:05.000"))
}
}time.Since e time.Until
Atalhos convenientes para medir o tempo decorrido e o tempo restante até um evento:
package main
import ("fmt"; "time")
func benchmark(fn func()) time.Duration {
start := time.Now()
fn()
return time.Since(start) // = time.Now().Sub(start)
}
func main() {
d := benchmark(func() { time.Sleep(50 * time.Millisecond) })
fmt.Printf("took %v\n", d)
deadline := time.Now().Add(5 * time.Minute)
fmt.Printf("%.0f minutes remaining\n", time.Until(deadline).Minutes())
}Fusos horários
Go gerencia fusos horários com time.Location. Carregue os fusos com time.LoadLocation:
package main
import ("fmt"; "time")
func main() {
utc := time.Now().UTC()
fmt.Println(utc)
loc, err := time.LoadLocation("America/New_York")
if err != nil { panic(err) }
nyTime := utc.In(loc)
fmt.Println(nyTime)
// Compare times — always in UTC internally
fmt.Println(utc.Equal(nyTime)) // true — same instant
}time.Unix — Marcas de tempo Unix
Converta entre time.Time e marcas de tempo Unix:
package main
import ("fmt"; "time")
func main() {
now := time.Now()
unix := now.Unix() // seconds since epoch
unixMilli := now.UnixMilli() // milliseconds
unixNano := now.UnixNano() // nanoseconds
fmt.Println(unix, unixMilli, unixNano)
// Convert back:
t := time.Unix(unix, 0)
fmt.Println(t.Format(time.RFC3339))
}Verificação rápida
Que horário de referência Go usa como modelo de formatação?
Revisão: pacote time
Resumo:
time.Now()— hora atual; campos por meio de.Year(),.Month()e assim por diantetime.Duration— nanossegundos; usetime.Hour,time.Minutee assim por diantet.Format(layout)/time.Parse(layout, s)— a formatação usa o horário de referência2006-01-02 15:04:05time.Since/time.Untilpara o tempo decorrido e restantetime.NewTickerpara eventos periódicos — sempre usedefer Stop()
Perguntas Frequentes
A aula “Fundamentos do pacote time” é grátis?
Sim — o texto completo de “Fundamentos do pacote time” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.
O que vou aprender em “Fundamentos do pacote time”?
Trabalhe com horários, durações e formatação Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Go Academy?
Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Fundamentos do pacote time”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Go Academy?
Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Pacotes fmt e strings
- strconv, math e sort
- Fundamentos do pacote time
- Pacotes os e filepath