times metodo hora formato formatear fecha actual ruby-on-rails ruby ruby-on-rails-3 timezone activesupport

ruby on rails - metodo - Convierta UTC a la hora local en Rails 3



metodo times ruby (5)

Tengo problemas para convertir una Time UTC o TimeWithZone a la hora local en Rails 3.

El moment decir es una variable de Time en UTC (por ejemplo, moment = Time.now.utc ). ¿Cómo convierto el moment a mi zona horaria y me ocupo del horario de verano (es decir, utilizando EST / EDT)?

Más precisamente, me gustaría imprimir "Lunes 14 de marzo, 9 a.m." si el horario corresponde a esta mañana a las 9 a.m. EDT y "Lunes 7 de marzo a las 9 a.m." si fue la hora del lunes a las 9 a.m. EST del lunes.

Espero que haya otra manera?

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 sentido pedir Time.utc(2011,1,1).in_time_zone("EDT") . Es un poco confuso, ya que "EST" es una zona horaria real, utilizada en algunos lugares que no utilizan el horario de verano y son (UTC-5) de un año.



Es fácil de configurar usando la zona local de su sistema, solo en su aplicación. Rb agregue esto

config.time_zone = Time.now.zone

Entonces, los rieles deben mostrar las marcas de tiempo en su tiempo local o puede usar algo como esta instrucción para obtener el tiempo local

Post.created_at.localtime


No sé por qué, pero en mi caso no funciona de la manera sugerida anteriormente. Pero funciona así:

Time.now.change(offset: "-3000")

Por supuesto, necesitas cambiar el valor de offset al tuyo.


Rails tiene sus propios nombres. Véalos con:

rake time:zones:us

También puede ejecutar el rake time:zones:all para todas las zonas horarias. Para ver más tareas de rake relacionadas con la zona: rake -D time

Por lo tanto, para convertir a EST, catering para DST automáticamente:

Time.now.in_time_zone("Eastern Time (US & Canada)")


Time#localtime le dará la hora en la zona horaria actual de la máquina que ejecuta el código:

> moment = Time.now.utc => 2011-03-14 15:15:58 UTC > moment.localtime => 2011-03-14 08:15:58 -0700

Actualización: si desea conversar a zonas horarias específicas en lugar de su propia zona horaria, está en la senda correcta. Sin embargo, en lugar de preocuparse por EST vs EDT, simplemente pase en la zona horaria del Este general: sabrá en función del día si es EDT o EST:

> Time.now.utc.in_time_zone("Eastern Time (US & Canada)") => Mon, 14 Mar 2011 11:21:05 EDT -04:00 > (Time.now.utc + 10.months).in_time_zone("Eastern Time (US & Canada)") => Sat, 14 Jan 2012 10:21:18 EST -05:00