ruby on rails - timezones - En Rails, ¿cuál es la mejor manera de crear una hora específica(no ahora) en una zona horaria en particular?
rails time zones (5)
¿Qué le parece usar el * in_time_zone * helper ...
Time.now.in_time_zone(''Sydney'')
Aquí hay una manera, pero ¿se puede pensar en un método más agradable o más "railsy"?
>> Time.use_zone(''Sydney''){ Time.zone.parse(''2011-04-12 2pm'') }
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Como se dijo anteriormente, para crear una hora en una zona horaria específica (p. Ej., 4/10/2014 1:30 p. M. Nueva York):
@event.start_time = Time.find_zone(''Eastern Time (US & Canada)'').local(2014,4,10,13,30)
=> Thu, 10 Apr 2014 13:30:00 EDT -04:00
@event.start_time.utc
=> 2014-04-10 17:30:00 UTC
Cuando se guarda en su db, se convertirá a UTC (en Postgres al menos si se usa un tipo de marca de tiempo en su migración), y en el acceso futuro se mostrará en relación con la zona horaria de la aplicación establecida en config / application.rb
Para mostrar correctamente la hora local, también almacenamos el nombre de la zona horaria (por ejemplo, ''Hora del este (EE. UU. Y Canadá)'' en nuestra base de datos. Entonces, cuando queremos imprimir el tiempo en nuestros puntos de vista, lo hacemos ...
@event.start_time.in_time_zone(@event.timezone)
=> Thu, 10 Apr 2014 13:30:00 EDT -04:00
Para obtener la zona horaria abreviada (por ejemplo, EST)
@event.start_time.in_time_zone(@event.timezone).zone
=> "EDT"
Creo que estás buscando
Time.find_zone(''Alaska'').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 AKST -09:00
Time.find_zone(''Amsterdam'').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 CET +01:00
Time.find_zone(''Sydney'').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 EST +11:00
Time.find_zone(''Wellington'').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 NZDT +13:00
Esto también funciona con análisis
Time.find_zone(''Sydney'').parse(''2011-04-12 2pm'')
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Esto es lo que uso:
Time.zone.local(2011, 4, 12, 14, 0)
Para analizar una fecha dentro de una zona horaria específica, puede usar ActiveSupport :: TimeZone
> ActiveSupport::TimeZone["Sydney"].parse("2011-04-12 2pm")
=> Tue, 12 Apr 2011 14:00:00 EST 10:00
La documentación de la API TimeZone está aquí: http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-c-5B-5D