При работе в мультизональной среде целесообразно установить часовой пояс на 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.
Что касается значения зоны, я предпочитаю названия городов, так как она работает плавно с переходом на летнее и зимнее время.