Java возвращает объект Date во Flex неправильно - PullRequest
1 голос
/ 20 сентября 2011

Я использую Flex, GraniteDS и Javа. Flex правильно отправляет дату в летнее время, например «10 сентября 10:00:00 UTC-7», но в конце концов я получаю ту же дату, но в стандартное время »10 сентября 11: 00: 00: 00 UTC-8 ». Как я понимаю, GraniteDS неправильно десериализует Java Date. Есть идеи, как это решить?

Ответы [ 4 ]

1 голос
/ 28 августа 2013

Это потому, что есть разница во времени между вашим флеш-клиентом и вашим сервером.Предположим, что: GMT + X: часовой пояс вашего сервера GMT + Y: часовой пояс вашего клиента

Правильный способ решения вашей проблемы - определить фиксированный часовой пояс в вашем формате сортировки (XML, AMF ...)и конвертируйте даты в правильных местах в этот часовой пояс.

Например:

Когда вы отправляете сообщение от вашего клиента на сервер: Клиент GMT + Y -> преобразование даты на стороне клиентав GMT + 0 -> AMF GMT + 0 -> преобразование на стороне сервера из GMT + 0 в GMT + X -> сервер GMT + X

Когда сервер отправляет дату клиенту: Сервер GMT + X-> Преобразование на стороне сервера в GMT + 0 -> AMF GMT + 0 -> Преобразование на стороне клиента в GMT + Y -> Клиентское время GMT + Y

С Granite это означает, что есть 2 исправления: изменениеGroovy шаблоны для преобразования даты на GMT + 0 на стороне клиента и добавления конвертера на стороне сервера (Дата конвертируется в Дата, но с преобразованием часового пояса).Я уже сделал этот патч на многих проектах Flex, он работает отлично.

0 голосов
/ 20 сентября 2011

Мы справились с этим, избежав проблемы, отформатировав все даты в виде строк при передаче между слоями.

0 голосов
/ 01 октября 2012

Нет, Granite ничего не делает неправильно, это встроенные преобразования времени Flash. Ссылка ниже уточняет. В некоторых приложениях (возможно, в более глобализированных приложениях «Flash-y», чем в централизованных приложениях «Enterprise-y») это желаемое поведение, но часто это не так.

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

http://flexblog.faratasystems.com/2008/02/05/flex-local-datestime-transfer-issue

Я обычно предпочитаю упомянутое мезмо решения send-as-String, но, конечно, решение и интеграция (ORM ...) будут определять решение.

(Этот тип проблемы обычно существует в любой технологии, которая сериализует объекты «дата / время», созданные в разных часовых поясах. Если вы рассматриваете объект времени в миллисекундах, новый Date () создает экземпляр для текущего времени будет установлено различное количество миллисекунд после «рождения» UNIX, в зависимости от часового пояса.)

0 голосов
/ 20 сентября 2011

Не знаю, решит ли это вашу проблему, но у меня была похожая проблема с датами Flex пару лет назад.
Я получал таблицу из базы данных SQL на гибкий SWF через ColdFusion. Я заметил, что дата преобразуется из часового пояса сервера ColdFusion / Database в часовой пояс, в котором работает приложение Flex. Может в этом проблема?

Я решил (хотя это добавило значительные накладные расходы), чтобы добавить разницу часовых поясов и компенсировать часовой пояс на гибком конце

...