Pular para o conteúdo

Stdlib · extensões

tzdata

fusos horários nomeados (IANA)

extensions.md · 35 linhas · 1 min de leitura

use tzdata

A base IANA tzdata que pluga no time.Zone do core. O time segue com Utc/Local/Offset (mecanismo, tier 0); isto é a camada de nomes ("America/Sao_Paulo") por cima: dado mutável (a base muda com a política dos países), carregado sob demanda, com peso só pra quem importa. Tier 1; é o exemplo canônico do corte mecanismo-vs-dado (§1).

fn named(name: string) -> Result[Zone, error{UnknownZone}] // "America/Sao_Paulo" → time.Zone
fn (z: Zone) offset_at(t: DateTime) -> i32 // offset (min) NAQUELE instante (resolve DST)
fn (z: Zone) abbreviation_at(t: DateTime) -> string // "-03" / "BRST"
fn (t: DateTime) in_zone(name: string) -> Result[DateTime, error{UnknownZone}] // converte p/ o fuso nomeado
fn list_zones() -> Iterator[string] // todos os nomes disponíveis
fn version() -> string // versão da base tzdata embarcada ("2026a")
use tzdata
sp := tzdata.named("America/Sao_Paulo") catch |e| { return e }
agora_sp := time.now_utc().to_zone(sp) // usa o time.Zone resolvido pela base
  • Pluga no time.Zone existente: não é um relógio paralelo; é a resolução de nome para offset (com DST). O time core não muda.
  • Carregada sob demanda: a base é grande e gira (releases tzdata anuais); só entra no binário de quem faz use tzdata. O caso comum (UTC/offset) nunca paga.
  • Offset é resolvido no instante (offset_at) porque DST faz o offset de um fuso variar no tempo: não há “o offset de São Paulo”, há o offset numa data.