Tengo problemas para convertir una UTC Time
o TimeWithZone
la hora local en Rails 3.
Digamos que moment
es una Time
variable en UTC (por ejemplo moment = Time.now.utc
). ¿Cómo puedo convertir moment
a mi zona horaria, teniendo en cuenta el horario de verano (es decir, usando EST / EDT)?
Más precisamente, me gustaría imprimir "Lunes 14 de marzo, 9 AM" si la hora corresponde a esta mañana 9 AM EDT y "Lunes 7 de marzo 9 AM" si la hora era 9 AM EST el pasado lunes.
¿Ojalá haya otra forma?
Editar : Primero pensé que "EDT" debería ser una zona horaria reconocida, pero "EDT" no es una zona horaria real, más como el estado de una zona horaria. Por ejemplo, no tendría ningún sentido pedirlo Time.utc(2011,1,1).in_time_zone("EDT")
. Es un poco confuso, ya que "EST" es una zona horaria real, que se utiliza en algunos lugares que no utilizan el horario de verano y tienen (UTC-5) un año.
fuente
(new Date()).getTimeZoneOffset()
. Pero es bastante inconsistente, por lo que este tipo parece haber escrito el suyo: onlineaspect.com/2007/06/08/…config.time_zone = 'Wellington'
y luego usar Time.current (que es equivalente a time.now pero usó la zona horaria que ha establecido)Time#localtime
le dará la hora en la zona horaria actual de la máquina que ejecuta el código:Actualización: si desea conversar a zonas horarias específicas en lugar de su propia zona horaria, está en el camino correcto. Sin embargo, en lugar de preocuparse por EST vs EDT, simplemente pase en la zona horaria del este general; sabrá según el día si es EDT o EST:
fuente
in_time_zone
método con su zona horaria.Time.now.localtime
funciona en una sesión normal de irb pero cuando intento ejecutarlo en una máquina que está en la zona horaria UTC, no funciona.Es fácil configurarlo usando la zona local de su sistema, solo en su application.rb agregue esto
Luego, los rieles deberían mostrarle marcas de tiempo en su hora local o puede usar algo como esta instrucción para obtener la hora local.
fuente
En realidad, hay una gema agradable llamada
local_time
por basecamp para hacer todo eso solo en el lado del cliente, creo:https://github.com/basecamp/local_time
fuente
No sé por qué, pero en mi caso no funciona de la forma sugerida anteriormente. Pero funciona así:
Por supuesto, necesita cambiar el
offset
valor al suyo.fuente
Si realmente lo está haciendo solo porque desea obtener la zona horaria del usuario, todo lo que tiene que hacer es cambiar su zona horaria en usted
config/applications.rb
.Me gusta esto:
Rails, de forma predeterminada, guardará su registro de tiempo en UTC incluso si especifica la zona horaria actual.
Así que esto es todo lo que tienes que hacer y listo.
fuente