Показать местное время в поле зрения - PullRequest
9 голосов
/ 25 сентября 2010

В config / application.rb у меня есть "config.time_zone = 'UTC'" (без кавычек) в файле.Я предполагаю, что это делается для преобразования времени пользователя, которое вводится в представление, в UTC, которое хранится в базе данных.У меня вопрос, как мне преобразовать значение UTC из базы данных в местное время пользователя для отображения в представлении?Я прочитал, что рельсы позаботятся об этом автоматически - как мне сказать это сделать?

У меня есть поле часового пояса в строке каждого пользователя в базе данных, я просто не знаю, что там хранить.Я знаю о времени рейка: zone: all - я просто не знаю, как все это сходится в рельсах 3!

Спасибо,

sk

1 Ответ

16 голосов
/ 25 сентября 2010

При работе в мультизональной среде целесообразно установить часовой пояс на UTC.Это совершенно верно в вашем приложении. Rb

Rails автоматически все время преобразуется в текущий часовой пояс , который можно установить с помощью

Time.zone = "some-zone"

. before_filter в ApplicationController, где я устанавливаю часовой пояс в соответствии с текущим пользователем.Тогда все операции работают в этой зоне, и вам не нужно думать об этом в ваших контроллерах / моделях / представлениях.

Предположим, что у вас есть некоторая модель Foo с некоторым полем datetime.Затем, работая в консоли irb:

Time.zone = "Prague"
x = Foo.create(:it_will_happen_at => Time.zone.now)
x.it_will_happen_at # => Sat, 25 Sep 2010 13:45:46 CEST +02:00 

Time.zone = "London"
# it is needed to refresh the field after a time zone has changed.
# In normal situation it'd not be needed, it's just for this console example
x.reload
x.it_will_happen_at # => Sat, 25 Sep 2010 12:44:46 BST +01:00 

Когда вы загляните в БД, вы увидите, что значением является Sat, 25 Sep 2010 11:45:46 UTC.

Что касается значения зоны, я предпочитаю названия городов, так как она работает плавно с переходом на летнее и зимнее время.

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