Служебный клиент DateTime Смещение совместимости с часовым поясом - PullRequest
1 голос
/ 21 марта 2011

Я пытаюсь связаться с веб-сервисом Java через приложение .NET, используя ссылку на сервис Visual Studio (классы пространства имен System.ServiceModel). Я обнаружил, что всякий раз, когда он сериализует значение DateTime, он не определяет смещение. Проблема в два раза:

  1. Я не могу понять, как создать объект DateTime с определенным часовым поясом. Я могу создать DateTimeOffset, который выполнит это, но клиент службы ожидает объект DateTime.
  2. Когда объект DateTime сериализуется, он не включает смещение часового пояса.

Чтобы уточнить вопрос №2, XML, который служба ожидает для объекта отметки времени, выглядит следующим образом:

  <startDate>2011-03-18T00:00:00-07:00</startDate>
  <endDate>2011-03-19T00:00:00-07:00</endDate>

Однако XML-код, который я вижу при отслеживании приложения .NET, выглядит следующим образом:

  <startDate>2011-03-18T00:00:00</startDate>
  <endDate>2011-03-19T00:00:00</endDate>

Для веб-службы требуется часовой пояс, поскольку базовые данные отслеживаются в GMT-0. Возвращаемые данные поступают ежедневно, поэтому, если я не укажу часовой пояс, я получу данные для GMT-0. Только когда я предоставляю смещение в запросе, я получаю в правильном часовом поясе данные.

1 Ответ

1 голос
/ 23 марта 2011

Предложение: преобразуйте все значения DateTimeOffset в значения DateTime в UTC и отправьте их в веб-приложение.

static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime) {
   if (dateTime.Offset.Equals(TimeSpan.Zero))
      return dateTime.UtcDateTime;
   else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime)))
      return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local);
   else
      return dateTime.DateTime;
}

С этой страницы: Общий метод конвертации

Надеюсь, это поможет.

...