Часовые пояса в Rails - PullRequest
       22

Часовые пояса в Rails

6 голосов
/ 15 января 2011

У меня есть приложение, в котором я хочу разрешить пользователю устанавливать часовые пояса. Когда пользователь создает запись напоминания, запись будет сохранена в дБ в формате UTC. Но когда он открывает запись календаря в приложении, он должен увидеть запись в выбранном часовом поясе. Я использую Chronic, но здесь это неважно.
В моем ApplicationController.rb есть следующая строка:

before_filter :set_user_time_zone
...
def set_user_time_zone
    Time.zone = current_user.timezone if user_signed_in?
end

После этого записи все еще сохраняются в UTC, но с разницей во времени. Например, я установил часовой пояс - «Дели», который +530 от UTC. Когда я хочу сохранить запись календаря для «16 января - 12:15» - база данных заполняется «2011-01-15 18:45:19 UTC» - так что это 5:30 часов до фактического времени сохранить.
В пользовательском интерфейсе я также вижу эту запись вместо времени, отображаемого в часовом поясе текущего пользователя.

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

1 Ответ

9 голосов
/ 16 января 2011

В базе данных вам нужно хранить время в UTC, а затем для пользовательского интерфейса вам нужно преобразовать его в часовой пояс пользователя.

Пример в консоли rails:

Time.zone = "New Delhi"         #=> "New Delhi"

Time.now                        # => 2011-01-15 16:45:18 -0600

Time.now.in_time_zone           # => Sun, 16 Jan 2011 04:15:26 IST +05:30
...