GWT JsDate сериализуется в JSON - PullRequest
1 голос
/ 08 июля 2011

У меня проблемы с сериализацией правильного JSON для полей даты в gwt.

В gwt у меня есть оверлейный класс с полем JsDate под названием 'dtTemp'.Вне объекта я устанавливаю значение следующим образом: myOverlayObj.setDtTemp (JsDate.create (1999, 10, 1));

У меня есть метод toJSON в классе оверлея, который преобразует объект вJSON, который можно передать обратно в мой веб-сервис ASP.NET.Это выглядит так:

public final String toJSON () {return new JSONObject (this) .toString ();
}

К сожалению, похоже, что генерируемый JSON имеет плохойдаты.Он создает этот JSON для объекта, для которого dtTemp ПРЕДПОЛАГАЕТСЯ БЫТЬ 10/1/1999: {"intTemp": 7007, "strTemp": "hello", "dtTemp": 941439600000}

, когда он должен создатьэто (я создал этот параллельный объект в .NET, используя сериализатор JSON): {"intTemp": 7007, "strTemp": "hello", "dtTemp": new Date (938761200000)}

мой вопросКак я могу сериализовать действительные даты в GWT?Мало того, что он пропускает «новую дату», но это совершенно другое число!(при оценке Datetime в .NET с использованием JSON.NET дата, сгенерированная 'toJSON', в конечном итоге становится чем-то вроде 01.11.1999 в 7:00)

Любая помощь будет принята с благодарностью!

Спасибо!

1 Ответ

1 голос
/ 09 июля 2011

JSON не может представлять даты: http://www.json.org

new Date - это JavaScript, это не JSON.

Что касается разницы в отметке времени unix, то здесь есть две проблемы:

  1. во-первых, JsDate.create(1999, 10, 1) действительно представляет 11/1/1999, а не 10/1/1999: месяцы в API основаны на 0, поэтому 10 - ноябрь.
  2. "7AM""связано с часовым поясом: 938761200000 - это 01.10.1999 7:00 UTC, а 941439600000 - это 01.11.1999 UTC.Вы, вероятно, находитесь в UTC + 7, поэтому ваш 10/1/1999 00:00 UTC + 7 действительно 10/1/1999 07:00 UTC: когда вы создаете дату, используя Jsdate.create, это относится к вашему часовому поясу (так что это 00:00 UTC + 7 в вашем случае), и ваш сервер затем показывает дату в UTC (которая дает 7 утра).Вы должны использовать JsDate.UTC(1999, 9, 1, 0, 0, 0, 0) для создания своего экземпляра.

Я настоятельно рекомендую прочитать: http://unix4lyfe.org/time/

...