Предположим, вам нужен часовой пояс, который НЕ использует 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.