Как передать Java Date в .Net webservice с помощью Axis - PullRequest
3 голосов
/ 11 апреля 2011

Я пытаюсь вызвать веб-сервис .Net с Java. У меня есть java.sql.Date, который я преобразовываю в календарь, который затем передается в .Net как DateTime.

К сожалению, когда он попадает на другую сторону, это на день позже отправленной. Это известная проблема согласно (http://wiki.apache.org/ws/FrontPage/Axis/DotNetInterop)), и я уверен, что есть способ обойти ее, но я просто не могу ее найти.

Кто-нибудь знает, как правильно преобразовать java.sql.Date в календарь, чтобы не было проблемы смещения на 24 часа?

Код, который у меня есть на данный момент, следующий:

java.sql.Date myDate = Date.valueOf("2011-04-11");

Calendar calendarDate = Calendar.getInstance();
calendarDate.clear();

calendarDate.setTime(myDate); //we then pass calendarDate off to webservice...

Когда я смотрю информацию о часовом поясе, я вижу следующее:

В Java меня получает «Восточное стандартное время (Новый Южный Уэльс)»:

calendarDate.getTimeZone().getDisplayName();

В .Net меня получает «AUS Eastern Standard Time»:

TimeZone.CurrentTimeZone.StandardName;

Насколько мне известно, и Java, и .Net имеют местное время в одном часовом поясе ...

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Я не уверен, что это правильно, но, похоже, это решило мою проблему ...

java.sql.Date myDate = Date.valueOf("2011-04-11");
Calendar calendarDate = Calendar.getInstance();

//normalise the SQL date 
//http://download.oracle.com/javase/6/docs/api/java/sql/Date.html
calendarDate.set(Calendar.HOUR_OF_DAY, 0);
calendarDate.set(Calendar.MINUTE, 0);
calendarDate.set(Calendar.SECOND, 0);
calendarDate.set(Calendar.MILLISECOND, 0);

calendarDate.setTime(myDate);

calendarDate.set(Calendar.DST_OFFSET, 0); //Clear the daylight savings offset
calendarDate.set(Calendar.ZONE_OFFSET, 0); //Clear the timezone offset

Установка смещения на ноль, кажется, позволяет избежатьпроблема смещения в целом.

Я думаю, что это работает, потому что веб-сервисы Java и .Net, кажется, взаимодействуют так:

  • Даты Java - это GMT плюс смещение
  • Похоже, что Axis передает дату в .Net без информации о смещении.
  • .Net затем принимает местное время для времени, которое фактически является GMT ..., что приводит к проблемам смещения +/- 24 часа.

Я думаю, что мое исправление установки смещения на ноль после установки даты заставляет Календарь поддерживать дату в соответствии с местным временем при отсутствии смещения.Таким образом, когда дата попадает в веб-сервис .Net, предположение о местном времени является правильным.

Я понятия не имею, так ли это, и я был бы признателен за лучшее объяснение ... но пока, если не сказанов противном случае это решение работает ...

0 голосов
/ 11 апреля 2011

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

...