Приложение Grails, обслуживающее несколько часовых поясов - PullRequest
4 голосов
/ 26 ноября 2010

Как правильно обращаться с часовыми поясами в приложении Grails, в котором пользователи находятся в нескольких часовых поясах? Существует ли стандартный подход к отключению приложений Grails для часовых поясов? Может быть, есть что-то похожее на то, как Rails обрабатывает поддержку нескольких часовых поясов? http://mad.ly/2008/04/09/rails-21-time-zone-support-an-overview/

Есть ли способ установить текущий часовой пояс для сеанса пользователя? Это может означать, что вы можете использовать несколько активных пользовательских сессий с разными часовыми поясами для работы с «Дата».

Я пытаюсь избежать необходимости вручную обрабатывать преобразования часовых поясов.

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010

Во-первых, часто хорошей идеей является предоставление пользователю выбора - в каком часовом поясе он находится. Вы можете попытаться определить его по его настройкам, но это ненадежно.В Grails вы можете позволить пользователю выбрать его часовой пояс:

<g:timeZoneSelect name="myTimeZone" />

Обратите внимание, что атрибут value по умолчанию равен текущему Locale.Так что я думаю, что по умолчанию grales localeresolver отлично подойдет, угадав языковой стандарт пользователя.

Чтобы это работало, вам нужно хранить все время в БД в UTC (или другом часовом поясе, который установленвсе приложение)

В документации <g:formatDate> утверждается, что оно имеет только 3 атрибута, но, похоже, по крайней мере версия 1.2 поддерживает атрибут timeZone,Таким образом, вы должны поставить timeZone="${currentUser.timeZone}"

0 голосов
/ 26 ноября 2010

Вы можете попробовать использовать JodaTime и класс DateTime, внутри которого есть часовой пояс. Тем не менее, я считаю, что вам нужно хранить время в UTС. Для этого вам нужно будет предоставить собственное отображение в GORM, которое применяет UTC, собственную библиотеку тегов форматирования даты, которая учитывает часовой пояс пользователя, и некоторые другие вещи.

OTOH, если у вас есть некоторые общие функции, такие как фоновые задания (я полагаю, вы будете), какой часовой пояс он будет использовать?

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