GWT java.util.Date ошибка сериализации - PullRequest
9 голосов
/ 20 января 2010

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

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

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

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

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

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

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

Ответы [ 6 ]

5 голосов
/ 21 января 2010

Предполагая, что вы используете 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 date = new Date(millis);
Это избавляет от необходимости тратить время на форматирование и синтаксический анализатор.

2 голосов
/ 15 октября 2010

Я почти уверен, что в библиотеке FTR есть эмуляция даты.

http://code.google.com/p/ftr-gwt-library

2 голосов
/ 21 января 2010

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

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

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

David

1 голос
/ 11 января 2011

Возможные проблемы - разница в часовых поясах Клиент / Сервер.

1 голос
/ 21 января 2010

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

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

0 голосов
/ 20 января 2010

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

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