Рельсы кастомные TimeZone - PullRequest
       25

Рельсы кастомные TimeZone

0 голосов
/ 23 марта 2010

Как мне установить приложение на рельсы с пользовательским часовым поясом? Я хочу установить часовой пояс своего приложения с UTC-04: 00 без перехода на летнее время.

обновление: Чтобы уточнить мой вопрос, я понимаю, что могу установить имя часового пояса в файле environment.rb с одним из имен из Константы TimeZone . Я хочу, чтобы часовой пояс моего приложения был UTC -04: 00 без перехода на летнее время.

Спасибо, Со Мое

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Предположим, вам нужен часовой пояс, который НЕ использует DST и в основном отслеживает восточное стандартное время (также известное как восточное преобладающее время). Вы хотите, чтобы это всегда было смещением -05: 00.

Используйте часовой пояс Etc/GMT+5. Rails будет лениво загружать часовые пояса, не входящие в его обычный список из TZInfo, поэтому вы можете выбрать из: http://tzinfo.rubyforge.org/svn/trunk/tzinfo/lib/tzinfo/definitions/Etc/

Вот несколько примеров, подтверждающих это, в моей консоли Rails 3.2 rails:

Пример перехода на летнее время. 4 октября - летнее время. Вы ожидаете, что ваши часы будут по одному на восточное время и ваш особый часовой пояс. 2011-10-05 04:57:23 в UTC должно быть 2011-10-05 00:57:23 по восточному поясному времени.

1.9.3p0 :014 > DateTime.civil(2011,10,5,4,57,23)
 => Wed, 05 Oct 2011 04:57:23 +0000 
1.9.3p0 :015 > DateTime.civil(2011,10,5,4,57,23).in_time_zone('Eastern Time (US & Canada)') 
 => Wed, 05 Oct 2011 00:57:23 EDT -04:00 
1.9.3p0 :016 > DateTime.civil(2011,10,5,4,57,23).in_time_zone('Etc/GMT+5')
 => Tue, 04 Oct 2011 23:57:23 GMT+5 -05:00 

Пример не летнего времени. 1 декабря - стандартное время. Вы ожидаете, что восточное время и ваш обычай «всегда EST» будут эквивалентны. 2011-12-01 02:30:45 должно быть 2011-11-30 21:30:45 как в EST, так и в вашем специальном часовом поясе.

1.9.3p0 :010 >   DateTime.civil(2011,12,1,2,30,45)
 => Thu, 01 Dec 2011 02:30:45 +0000 
1.9.3p0 :012 > DateTime.civil(2011,12,1,2,30,45).in_time_zone('Eastern Time (US & Canada)')
 => Wed, 30 Nov 2011 21:30:45 EST -05:00 
1.9.3p0 :013 > DateTime.civil(2011,12,1,2,30,45).in_time_zone('Etc/GMT+5')
 => Wed, 30 Nov 2011 21:30:45 GMT+5 -05:00 

Почему это GMT+5, а не GMT-5? Я не совсем уверен. Я бы ожидал, что это будет GMT-5, но так выглядит часовой пояс etc в TZInfo.

0 голосов
/ 30 января 2011

Как правило, вы захотите делать это только тогда, когда место, в котором вы живете, не использует летнее время. В вашем конкретном случае вам повезло, и вы можете использовать часовой пояс "La Paz". Согласно этому сайту , он не практикует DST.

Вы всегда можете запустить rake time: zone: all и посмотреть, какие смещения UTC соответствуют смещению, которое вы хотите использовать. Затем посмотрите эти смещения в Google, чтобы увидеть, изменятся ли они в течение года.

Я не знаю общего способа сообщить Rails, что вы хотите UTC +/- фиксированное смещение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...