Здесь один из способов, но вы можете подумать о более приятном или более "рельсном" методе?
>> Time.use_zone('Sydney'){ Time.zone.parse('2011-04-12 2pm') }
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Здесь один из способов, но вы можете подумать о более приятном или более "рельсном" методе?
>> Time.use_zone('Sydney'){ Time.zone.parse('2011-04-12 2pm') }
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Для анализа даты в определенном часовом поясе вы можете использовать ActiveSupport:: TimeZone
> ActiveSupport::TimeZone["Sydney"].parse("2011-04-12 2pm")
=> Tue, 12 Apr 2011 14:00:00 EST 10:00
Документация по TimeZone API находится здесь: http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-c-5B-5D
Это то, что я использую:
Time.zone.local(2011, 4, 12, 14, 0)
Я думаю, что вы ищете
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
Это также работает с parse
Time.find_zone('Sydney').parse('2011-04-12 2pm')
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Как указано выше, чтобы создать время в конкретном часовом поясе (например, 4/10/2014, 13:30 Нью-Йорк):
@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
Когда он будет сохранен на вашем db, он будет преобразован в UTC (в Postgres, по крайней мере, если вы используете тип отметки времени при переносе), а при последующем доступе он будет отображаться относительно часового пояса приложения, установленного в config/application.rb
Чтобы правильно отображать местное время, мы также сохраняем имя часового пояса (например, "Восточное время (США и Канада)" ) в нашей базе данных. Поэтому, когда мы хотим напечатать время в наших представлениях, мы делаем...
@event.start_time.in_time_zone(@event.timezone)
=> Thu, 10 Apr 2014 13:30:00 EDT -04:00
Чтобы получить сокращенную временную зону (например, EST)
@event.start_time.in_time_zone(@event.timezone).zone
=> "EDT"
Как насчет использования * in_time_zone * помощника..
Time.now.in_time_zone('Sydney')