Zonas horarias
Gestione zonas horarias
Zonas horarias es una lección gratuita de Ruby Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Ruby Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Ruby Academy incluye 4 lecciones en total.
Por qué son importantes las zonas horarias
El mismo instante se ve de forma diferente según la ubicación. Gestionar mal las zonas provoca errores de varias horas, por lo que debe especificar siempre qué zona utiliza una hora.
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.zone || t.utc_offset)
puts(t.utc_offset)UTC: la zona de referencia
UTC (tiempo universal coordinado) es la referencia global. Almacene y haga los cálculos en UTC y convierta la hora para mostrarla.
t = Time.utc(2026, 5, 30, 9, 0, 0)
puts(t.utc?)
puts(t.hour)Hora local
Time.now y Time.local utilizan la zona local de la máquina. El desfase con respecto a UTC se indica mediante utc_offset en segundos.
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.utc_offset)
puts(t.utc_offset / 3600)Convertir a UTC
getutc (alias utc) devuelve el mismo instante expresado en UTC. La hora del reloj cambia, pero el momento es idéntico.
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.hour)
puts(t.getutc.hour)Convertir a un desfase local
getlocal acepta una cadena de desfase explícita y devuelve el instante en esa zona.
t = Time.utc(2026, 5, 30, 9, 0, 0)
istanbul = t.getlocal('+03:00')
puts(istanbul.hour)Especificar el desfase al crear
Pase una cadena de desfase como último argumento de Time.new para fijar la zona durante la creación.
ny = Time.new(2026, 5, 30, 8, 0, 0, '-04:00')
puts(ny.utc_offset / 3600)
puts(ny.getutc.hour)El mismo instante, relojes distintos
Dos horas en zonas diferentes pueden representar exactamente el mismo instante. La comparación utiliza el momento subyacente, por lo que son iguales.
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)Desfases en ISO 8601
Las marcas de tiempo ISO 8601 incluyen el desfase (por ejemplo, +03:00 o Z para UTC), lo que evita ambigüedades entre sistemas.
require 'time'
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.iso8601)
puts(t.getutc.iso8601)Analizar cadenas con zona horaria
Time.parse respeta el desfase presente en la cadena de entrada.
require 'time'
t = Time.parse('2026-05-30T12:00:00+03:00')
puts(t.utc_offset / 3600)
puts(t.getutc.hour)Práctica recomendada: almacenar en UTC
El patrón más seguro es: almacenar en UTC, hacer la aritmética en UTC y convertir a la zona del usuario únicamente al mostrar la hora. Así se evita por completo la ambigüedad.
stored = Time.utc(2026, 5, 30, 9, 0, 0)
display = stored.getlocal('+03:00')
puts("UTC #{stored.hour} -> Local #{display.hour}")Precaución con el horario de verano
Un desfase fijo como +03:00 ignora el horario de verano. Para zonas con nombre y reglas de horario de verano se necesitan bibliotecas como la gema tzinfo; la clase Time principal solo conoce desfases fijos.
t = Time.new(2026, 7, 1, 12, 0, 0, '+02:00')
puts(t.utc_offset / 3600)Comprobación rápida
¿Cuál es la estrategia recomendada para gestionar las zonas horarias en una aplicación?
Resumen: zonas horarias
Ha aprendido a gestionar correctamente las zonas:
- UTC es la referencia global
getutcygetlocalconvierten sin cambiar el instante- Los desfases se establecen al crear el objeto o en las cadenas ISO 8601
- El mismo instante en zonas distintas se compara como igual
- Almacene en UTC y muestre la hora local; los desfases fijos ignoran el horario de verano
require 'time'
puts(Time.utc(2026,5,30,9).getlocal('+03:00').hour)Preguntas frecuentes
¿La lección «Zonas horarias» es gratis?
Sí — el texto completo de «Zonas horarias» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Ruby Academy, actualiza a CoddyKit PRO. El curso de Ruby Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Zonas horarias»?
Gestione zonas horarias Practicas Ruby Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Ruby Academy?
No se requiere experiencia previa. Ruby Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Zonas horarias»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Ruby Academy?
Sí. Cada lección de Ruby Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.