Часовой пояс Rails: установка Time.zone без изменения Time.current

В Rails 3.0.10 я использую Time.zone, чтобы изменить то, как пользователь видит время курсов, опубликованных в США. Однако изменение часового пояса, похоже, ведет себя не так, как я ожидал

Time.zone = TZInfo::Timezone.get('America/Los_Angeles')
Time.zone     # => (GMT-08:00) America/Los_Angeles
Time.current  # => 2011-10-30 14:00:00 -0700


Time.zone = TZInfo::Timezone.get('America/Chicago')
Time.zone     # => (GMT-06:00) America/Chicago
Time.current  # => 2011-10-30 14:00:00 -0700

Я ожидаю, что время изменится, а также смещение, чтобы приспособиться к изменению Time.zone, однако не похоже, что оно ведет себя таким образом.

Я столкнулся с проблемой, когда пользователи, скажем, в Лос-Анджелесе, Калифорния, создают курсы, которые заканчиваются в 9 вечера по калифорнийскому времени, а пользователи в разных часовых поясах видят, что курс становится неактивным и исчезает в разное время, а не в одно и то же время. Может ли кто-нибудь пролить свет на то, что на самом деле делает настройка Time.zone и как я могу заставить курс, который заканчивается в 21:00 (PST), правильно исчезнуть в 23:00 (CST)?


person Schneems    schedule 15.12.2011    source источник


Ответы (1)


Заменять

Time.current

С участием

Time.zone.now

Это даст вам текущее время в часовом поясе, который вы установили.

person jbrowning    schedule 15.12.2011
comment
спасибо, другой постер в SO неправильно сказал, что current по сути является псевдонимом Time.zone.now, думаю, мне следовало проверить документы. Благодарим за помощь - person Schneems; 16.12.2011
comment
Если вы посмотрите на apidock.com/rails/v3.0.5/Time/ текущий/класс и apidock.com/rails/v3.0.7/ Time/current/class вы увидите, что поведение Time.current изменилось между Rails 3.0.5 и Rails 3.0.7. До Rails 3.0.7 он возвращал Time.zone.now только в том случае, если было установлено Time.zone_default. В противном случае он просто вернет Time.now. Вы уверены, что используете › 3.0.5? - person jbrowning; 16.12.2011