Клиентский часовой пояс поддерживает в GWT

Экземпляры того же класса могут получить доступ к членам парламента, не занимающим официального поста других экземпляров:

class Thing {
  private int x;

  public int addThings(Thing t2) {
    return this.x + t2.x;  // Can access t2's private value!
  }
}
29
задан antony.trupe 14 December 2009 в 05:05
поделиться

3 ответа

По моему опыту, следующая передовая практика значительно снижает сложность и путаницу при работе с датами и часовыми поясами в gwt:

  1. При работе / хранении дат в приложении обрабатывать все даты как миллисекунды с эпохи в часовом поясе GMT. Вы можете сохранить их как строку или int, это не имеет особого значения.
  2. Всякий раз, когда дата отображается для конечного пользователя, форматируйте дату, используя соответствующий часовой пояс.

В вашем случае, когда вы создаете дату на сервере (часовой пояс A), преобразуйте ее в миллисекунды с эпохи по Гринвичу перед отправкой клиенту. На клиенте используйте DateTimeFormat (или напишите свою собственную утилиту форматирования даты), чтобы преобразовать его в часовой пояс B или часовой пояс C.

25
ответ дан 28 November 2019 в 01:55
поделиться

Я предполагаю, что вы здесь используете вызовы RPC для связи сервер-клиент. Также предположим, что вас не волнует часовой пояс B, и вы знаете, какой часовой пояс C на сервере.

У вас есть несколько вариантов:

  • Вычислить желаемую дату на сервере (нет ограничений Java на то, что вы можно там) и отправить его в виде строки для отображения клиенту, чтобы вам больше не приходилось выполнять преобразования на клиенте.

или:

  • Вычислить смещение между часовыми поясами A и C на сервере примените его ко всем объектам Date, которые вы передаете клиенту, и просто отобразите их на клиенте.

если по какой-то причине ни один из них не был действителен для вас

  • Рассчитайте смещение, отправьте его клиенту и примените его к любой дате, которую вы получаете от сервера, преобразовав в мс, добавив смещение и затем создав дату снова объект.
2
ответ дан 28 November 2019 в 01:55
поделиться

Вы не можете изменить часовой пояс GWT, следовательно, все java.util.Date имеют часовой пояс браузера. Вам нужно будет обработать текущий часовой пояс вручную.

Я вижу 3 варианта:

  1. Вы сами управляете преобразованием часового пояса.

  2. Вы переопределяете сериализатор / десериализатор java.util.Date как в этом посте . И, возможно, с использованием специальной реализации java.util.Date , которая переопределяет getTimezoneOffset () . Этот подход требует перекомпиляции GWT API!.

  3. Вы реализуете свою собственную дату, либо путем расширения java.util. Дата (как в варианте 2) или обертывание его каким-либо объектом часового пояса. В этом варианте CustomFieldSerializer все еще может быть полезен, но нет необходимости перекомпилировать GWT API.

Я бы предпочел вариант 3. По крайней мере, до тех пор, пока GWT RPC, возможно, когда-нибудь не будет поддерживать замену CustomFieldSerializer


] Полезные советы по форматированию даты и времени.

6
ответ дан 28 November 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: