Go Academy · Aula

Fusos horários

Trabalhe com localidades

Aula 4 de 413 etapas

Fusos horários é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 4 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.

O horário carrega uma localização

Todo time.Time tem uma localização associada (fuso horário). O mesmo instante pode ser exibido de formas diferentes dependendo do fuso.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.Location())
}

UTC e local

Duas localizações integradas estão sempre disponíveis:

  • time.UTC para o Tempo Universal Coordenado.
  • time.Local para o fuso horário local da máquina.
package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.UTC().Hour())
}

Carregando um fuso nomeado

time.LoadLocation(name) procura um fuso IANA, como "Europe/Istanbul" ou "America/New_York".

package main

import (
    "fmt"
    "time"
)

func main() {
    loc, err := time.LoadLocation("UTC")
    fmt.Println(loc, err)
}

Convertendo fusos com In

t.In(loc) retorna o mesmo instante exibido em um fuso diferente. O momento subjacente não muda, apenas sua apresentação.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.In(time.UTC).Hour())
}

Mesmo instante, relógios diferentes

O meio-dia em UTC é um único instante, mas uma pessoa em outro fuso vê uma hora diferente no relógio. A diferença de Sub entre eles é zero.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    u := t.UTC()
    fmt.Println(t.Sub(u))
}

Criando um horário em um fuso

Passe uma localização como último argumento para time.Date a fim de criar um horário diretamente nesse fuso.

package main

import (
    "fmt"
    "time"
)

func main() {
    loc, _ := time.LoadLocation("UTC")
    t := time.Date(2026, 5, 30, 9, 0, 0, 0, loc)
    fmt.Println(t.Hour())
}

Lendo o deslocamento do fuso

t.Zone() retorna a abreviação do fuso e seu deslocamento em relação a UTC, em segundos.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    name, offset := t.Zone()
    fmt.Println(name, offset)
}

Fusos fixos

Quando você não precisa das regras completas de IANA, time.FixedZone(name, offsetSeconds) cria um fuso simples com deslocamento constante.

package main

import (
    "fmt"
    "time"
)

func main() {
    loc := time.FixedZone("GMT+3", 3*3600)
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, loc)
    name, off := t.Zone()
    fmt.Println(name, off)
}

Formatando entre fusos

Converta com In antes de formatar para mostrar uma marca de tempo no fuso do leitor.

package main

import (
    "fmt"
    "time"
)

func main() {
    loc := time.FixedZone("GMT+3", 3*3600)
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.In(loc).Format("15:04 MST"))
}

Armazene em UTC, exiba no fuso local

Uma regra bastante usada: armazene e faça os cálculos em UTC e converta para um fuso local somente ao exibir horários aos usuários. Isso evita ambiguidades.

package main

import (
    "fmt"
    "time"
)

func main() {
    stored := time.Date(2026, 5, 30, 9, 0, 0, 0, time.UTC)
    loc := time.FixedZone("GMT+2", 2*3600)
    fmt.Println("shown:", stored.In(loc).Hour())
}

Tratando erros de carregamento

LoadLocation pode falhar se o banco de dados de fusos estiver ausente ou se o nome for desconhecido. Sempre verifique o erro.

package main

import (
    "fmt"
    "time"
)

func main() {
    _, err := time.LoadLocation("Mars/Olympus")
    if err != nil {
        fmt.Println("unknown zone")
    }
}

Verificação rápida

O que t.In(loc) altera?

Recapitulação: fusos horários

Você aprendeu a trabalhar com localizações:

  • Todo horário tem uma localização; UTC e Local já vêm integrados.
  • Carregue fusos nomeados com LoadLocation ou crie deslocamentos com FixedZone.
  • Converta com In; armazene em UTC e exiba no fuso local.
package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 15, 0, 0, 0, time.UTC)
    loc := time.FixedZone("GMT-5", -5*3600)
    fmt.Println(t.In(loc).Format("15:04 MST"))
}
Grátis para começar

Aprenda Go com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
51
Aulas
203

Perguntas Frequentes

A aula “Fusos horários” é grátis?

Sim — o texto completo de “Fusos horários” é 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 “Fusos horários”?

Trabalhe com localidades 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 4 de 4.

Quanto tempo leva a aula “Fusos horários”?

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

  1. Tempo e duração
  2. Formatação e análise
  3. Temporizadores e marcadores
  4. Fusos horários
← Voltar para Go Academy