0Pricing
Ruby Academy · Aula

Fusos horários

Lide com fusos horários.

Fusos horários é uma aula grátis de Ruby 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 Ruby Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Ruby Academy inclui 4 aulas no total.

Por que os fusos horários são importantes

O mesmo instante parece diferente dependendo da localização. O tratamento incorreto dos fusos causa erros de diferença de horas, portanto o senhor deve indicar explicitamente qual fuso um horário usa.

t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.zone || t.utc_offset)
puts(t.utc_offset)

UTC: o fuso de referência

UTC (Tempo Universal Coordenado) é a referência global. Armazene e faça cálculos em UTC e depois converta para exibição.

t = Time.utc(2026, 5, 30, 9, 0, 0)
puts(t.utc?)
puts(t.hour)

Horário local

Time.now e Time.local usam o fuso local da máquina. A diferença em relação ao UTC é fornecida por utc_offset em segundos.

t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.utc_offset)
puts(t.utc_offset / 3600)

Convertendo para UTC

getutc (alias utc) retorna o mesmo instante expresso em UTC. O horário exibido no relógio muda, mas o momento é idêntico.

t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.hour)
puts(t.getutc.hour)

Convertendo para uma diferença local

getlocal aceita uma cadeia de caracteres de diferença explícita e retorna o instante nesse fuso.

t = Time.utc(2026, 5, 30, 9, 0, 0)
istanbul = t.getlocal('+03:00')
puts(istanbul.hour)

Especificando a diferença na criação

Passe uma cadeia de caracteres de diferença como último argumento para Time.new a fim de fixar o fuso no momento da criação.

ny = Time.new(2026, 5, 30, 8, 0, 0, '-04:00')
puts(ny.utc_offset / 3600)
puts(ny.getutc.hour)

Mesmo instante, relógios diferentes

Dois horários em fusos diferentes podem representar exatamente o mesmo instante. A comparação usa o momento subjacente, portanto eles são iguais.

a = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
b = Time.new(2026, 5, 30, 9, 0, 0, '+00:00')
puts(a == b)

Diferenças em ISO 8601

As marcas de tempo ISO 8601 incorporam a diferença (por exemplo, +03:00 ou Z para UTC), tornando-as inequívocas entre sistemas.

require 'time'
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.iso8601)
puts(t.getutc.iso8601)

Analisando cadeias com fuso

Time.parse respeita a diferença presente na cadeia de entrada.

require 'time'
t = Time.parse('2026-05-30T12:00:00+03:00')
puts(t.utc_offset / 3600)
puts(t.getutc.hour)

Boa prática: armazene em UTC

O padrão mais seguro é: armazene em UTC, faça a aritmética em UTC e converta para o fuso do usuário somente no momento da exibição. Isso elimina completamente a ambiguidade.

stored = Time.utc(2026, 5, 30, 9, 0, 0)
display = stored.getlocal('+03:00')
puts("UTC #{stored.hour} -> Local #{display.hour}")

Cuidado com o DST

Uma diferença fixa como +03:00 ignora o horário de verão. Para fusos nomeados com regras de DST, são necessárias bibliotecas como a gem tzinfo; a classe Time principal conhece apenas diferenças fixas.

t = Time.new(2026, 7, 1, 12, 0, 0, '+02:00')
puts(t.utc_offset / 3600)

Verificação rápida

Qual é a estratégia recomendada para lidar com fusos horários em uma aplicação?

Recapitulação: fusos horários

O senhor aprendeu a lidar corretamente com os fusos:

  • UTC é a referência global
  • getutc e getlocal convertem sem alterar o instante
  • As diferenças são definidas na criação ou em cadeias ISO 8601
  • O mesmo instante em fusos diferentes é considerado igual na comparação
  • Armazene em UTC e exiba no horário local; diferenças fixas ignoram o DST
require 'time'
puts(Time.utc(2026,5,30,9).getlocal('+03:00').hour)

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 Ruby Academy, atualize para CoddyKit PRO. O curso de Ruby Academy inclui 4 aulas no total.

O que vou aprender em “Fusos horários”?

Lide com fusos horários. Você pratica Ruby 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 Ruby Academy?

Nenhuma experiência prévia é necessária. Ruby 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 Ruby Academy?

Sim. Cada aula de Ruby 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. Classes de data e hora
  2. Análise e formatação
  3. Aritmética de horários
  4. Fusos horários
← Voltar para Ruby Academy