Leer, escribir y serializar fechas y horas mientras se mantiene la zona horaria constante se está volviendo molesto. Estoy usando Ruby (y Rails 3.0) y estoy tratando de modificar la zona horaria de un DateTime. (a UTC) pero no el tiempo en sí.¿Cómo modifico la zona horaria de un DateTime en Ruby?
quiero esto:
t = DateTime.now
t.hour
-> 4
t.offset = 0
t.hour
-> 4
t.utc?
-> true
Lo más cerca que he llegado es esto, pero no es intuitiva.
t = DateTime.now
t.hour
-> 4
t += t.offset
t = t.utc
t.hour
-> 4
t.utc?
-> true
¿Hay alguna otra manera mejor?
Si en realidad está usando 'ahora' como una marca de tiempo, entonces almacenar eso en la base de datos como una versión marcada UTC de la misma hora es una mentira, ¿correcto? Personalmente experimento menos dolores de cabeza cuando todas las partes del sistema hablan UTC, y solo en las vistas puedo ajustarme para mostrar en la zona horaria del servidor o navegador. – Phrogz
Es difícil porque estoy leyendo fechas de archivos CSV donde la zona horaria es desconocida o irrelevante, así que las almaceno como UTC en la base de datos. Pero cuando se consulta con fechas de la zona local (es decir, mayor que '2010/01/01 8:00 pm'), primero se convierte esa hora en UTC (el origen de mi problema) antes de usarlo en la consulta. Intento que toda la aplicación sea independiente de la zona horaria para que un usuario pueda cargar un archivo CSV con tiempos en el rango de 7:00 a 8:00, luego consultar de 7:00 a 8:00 y hacer que vuelva el mismo conjunto de registros. En cambio, Ruby supone que un tiempo analizado se encuentra en la zona local. –