Ошибка GWT java.util.Data.

GWT не сериализует дату Java правильно. Когда я попытался отправить Дату, созданную в Javascript через провод, я узнал, что даты между 1 апреля (смешные) и 25 октября в течение многих лет до 1983 года вычитаются на один день.

Это означает, что, скажем, и 1982-04-01, и 1982-03-31 стали 1982-03-31 на стороне Java.

Учитывая указанные даты, я бы предположил, что это какая-то проблема DST. Я пробовал поиск в Интернете и нашел только еще одну ссылку, которая описывает аналогичную проблему.

Я также попытался представить ошибку команде GWT, но с любопытством не смог найти bugtracker для GWT.

Итак, мои вопросы:

  • Кто-нибудь еще сталкивается с этим? Я нахожусь на GWT 1.7 и хочу подтвердить, что это происходит и на 2.0.

  • Мое решение заключалось в том, чтобы отправлять даты в виде строк и анализировать их на сервере. Кто-нибудь знает лучше обход?

Ответ 1

Предполагая, что вы используете java.util.Date

Вопрос 1: Кажется, что он исправлен в версии 2.0. Я создал оба Даты выше (1982-04-01 и 1982-03-31), и они правильно дошли до сервера (оба представляют на сервере как 1982-04-01 и 1982-03-31 соответственно). Моя настройка:

  • GWT 2.0
  • Java 1.6
  • OSX 10.6.2

Вопрос 2: Вы всегда можете передать "миллисекунды с 1 января 1970 года, 00:00:00 по Гринвичу" по асинхронной службе, которую вы можете использовать с помощью getTime() в объекте даты. На стороне сервера вы можете создать новую дату, передающую это значение в конструкторе:
Date date = new Date(millis);
Это позволяет справляться с форматировщиками и парсерами.

Ответ 2

Даты и время - сложный вопрос. Преобразование может зависеть от локали, в которой работает браузер, и поддерживать как JVM на сервере, так и локали клиентов являются актуальными.

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

GWT отправляет даты, используя только миллины с момента времени. Поскольку он использует объекты Date, вы ограничены тем, что Даты на стороне сервера будут автоматически изменены на часовой пояс серверов. Вы уверены, что учитываете возможную разницу во времени между клиентом и сервером?

Дэвид

Ответ 4

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

Никогда не сталкивался с вашей конкретной проблемой.

Ответ 5

Возможные проблемы soure - разница в часовых поясах Client/Server.

Ответ 6

Мы также сталкиваемся с аналогичной проблемой. Достаточно давно, что я не помню точных деталей, но суть в нем заключалась в незначительных различиях между java.util.Date и тем, как даты обрабатывались в Javascript. Наше решение оказалось таким же, как у вас, где фактическое значение, отправленное по проводу, обычно было строкой.