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
getutcegetlocalconvertem 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.