2013-10-03 2 views
0

Ниже кусок кода:.григорианский календарь возвращает предыдущую дату день, когда toGregorianCalendar() GetTime() называется

customerDetailsType.getDateOfBirth().toGregorianCalendar().getTime() 

Когда я проверить значение customer.getDateOfBirth() в режиме затмения отладки, она показывает мне текущую дату.

Когда я проверяю значение customerDetailsType.getDateOfBirth().toGregorianCalendar().getTime(), он показывает мне дату предыдущего дня.

Возвращаемое значение customer.getDateOfBirth() имеет тип: XMLGregorianCalendar. Я вызываю веб-сервис и передаю объект Date как dateOfBirth на сервер. Вышеприведенный код находится на сервере.

Определение DateOfBirth, как:

@XmlSchemaType(name = "date") 

protected XMLGregorianCalendar dateOfBirth; 
+2

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

+0

См. Мой ответ ниже. – Manglesh

ответ

1

Это может быть проблема часовых поясов. GregorianCalendar имеет второстепенную детализацию. Отлаживайте свой код, чтобы узнать, что такое время (часы, минуты, секунды) и компоненты часового пояса вашего метода getDateOfBirth(). Это может быть преобразование в локальное время или UTC, который сдвигает дату. Поскольку ваше приложение, вероятно, не заботится о часах, минутах, секундах чьей-то даты рождения (и не отображает его), отображаемая дата может быть просто на день раньше.

+0

Значение для getDateOfBirth: 2013-09-23 + 01: 00 значение для customerDetailsType.getDateOfBirth(). ToGregorianCalendar(). GetTime(): Sun Sep 22 23:00:00 UTC 2013 Эти значения - это когда я отлаживал кода и при проверке значений. Не знаю много о вопросе о часовом поясе, не могли бы вы помочь – Manglesh

+1

@Manglesh: Эти два значения представляют один и тот же момент времени, только с точки зрения разных часовых поясов. Это была моя точка в комментарии - 'Date' представляет * мгновенный * во времени. Он не имеет понятия о часовом поясе сам по себе или даже о системе календаря. Таким образом, это не означает конкретную дату, поскольку это будет зависеть от часового пояса и системы календаря. –

+0

согласился, но как это можно решить. как если бы я ввел дату рождения для клиента, он должен быть таким же, как передан из запроса webservice. потому что в этом случае клиент проходит 23, а в базе данных (serveride) - 22-й. Есть идеи. – Manglesh

Смежные вопросы