Проблема Grails с часовыми поясами и форматированием дат - PullRequest
4 голосов
/ 17 января 2012

Надеясь, что кто-то может помочь прояснить эту очень досадную ситуацию, в которой я нахожусь с Grails & Dates & Timezones, поскольку мое понимание не совсем полное.

Чтобы описать ситуацию, сначала я нахожусь в Великобритании, сервер, на котором работает приложение, находится в США (CST)

Пользователи входят в мое приложение, и у меня есть поле, в котором хранится их часовой пояс с единственной целью форматирования дат, надежно соответствующих их местоположению.

Когда приложение запускается, я устанавливаю часовой пояс по умолчанию в формате UTC, а также использую некоторые даты Joda в других местах приложения, поэтому я также установил для Joda DateTimeZone значение UTC. Но я действительно использую Joda только для фиксированных дат, которые не должны меняться при представлении.

Итак, в Bootstrap у меня есть TimeZone.setDefault (TimeZone.getTimeZone ("UTC"))

Теперь к проблеме, для определенных таблиц, которые я хочу записать, когда пользователь взаимодействовал, поэтому у меня есть поле Date с именем 'lastModified', и когда запись обновляется, я просто устанавливаю для нее новую Date ()

Я использую ajax-вызовы для представления данных, вместо того, чтобы показывать поле непосредственно в GSP, если оно предварительно обрабатывается в контроллере, а для форматирования я создаю средство форматирования с

DateTimeZone dtz = DateTimeZone.forID(user.timeZone)
def DateTimeFormatter tzAwareLongFormatter = DateTimeFormat.forPattern('MM/dd/yyyy HH:mm').withZone(dtz);

Я думал, что это было бы идеально, и даты будут проводиться в формате UTC, тогда, как пользователь из Европы / Лондона, я буду видеть даты в правильном формате.

Однако время, которое я получаю, составляет +7 часов

Таким образом, он действует так, как будто хранит дату и время в соответствии с тем, что будет в расположении сервера, хотя я устанавливаю время по умолчанию в Bootstrap.groovy.

Что-нибудь, что я должен установить, не прибегая к изменению самого времени сервера?

1 Ответ

1 голос
/ 26 июня 2012

Казалось, что установки TZ по умолчанию в начальной загрузке недостаточно, мне пришлось добавить

-Duser.timezone=UTC 

до JAVA_OPTS, пока кажется, что даты отображаются правильно.

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