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