преобразование даты и времени в веб-службу .net - PullRequest
2 голосов
/ 03 марта 2009

У меня есть веб-сервис (на самом деле это wcf-сервис с поддержкой Silverlight, но, по сути, это веб-сервис) с методом, принимающим параметр datetime. Метод вызывается из клиента, который может находиться в другом часовом поясе. Служба, на которой размещается веб-служба, использует стандартное тихоокеанское время, и, по-видимому, веб-служба преобразовывает значение времени даты в часовой пояс сервера. Целью веб-службы является сравнение значения даты и времени со значением в базе данных, но значение в базе данных основано на часовом поясе клиентов, поэтому из-за преобразования сравнение не работает.

Есть ли способ отключить преобразование?

Ответы [ 3 ]

1 голос
/ 04 марта 2009

и, похоже, веб-служба преобразует значение даты и времени в часовой пояс сервера.

Я пытаюсь убедиться, что у меня все правильно: ваш метод веб-службы принимает параметр типа DateTime (как в System.DateTime) и выполняет преобразование переданного параметра?

Объекты DateTime не имеют неявного часового пояса, поэтому любое определение веб-службы для определения местного времени будет логическим недостатком (по крайней мере, без поддержки критериев часового пояса).

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

ОБНОВЛЕНИЕ: Не уверен, что этот сценарий точен, поэтому, пожалуйста, уточните:

  • Клиент отправляет запрос со значением DateTime '12: 00: 00 00:00:00 CST'
  • Сервер в PST получает / интерпретирует запрос в '10: 00: 00 00:00:00 PM PST'

Если это так, можете ли вы преобразовать все данные во время UTC? Если вы выполняете поиск по запросу, это также подразумевает преобразование сохраненных данных в UTC.

1 голос
/ 05 марта 2009

Не совсем верно, что экземпляры DateTime (структуры) не несут информацию TimeZone. В каждой структуре DateTime есть свойство DateTimeKind , начиная с .NET ... 3.0? Я не знаю версию. «Вид» - это UTC, Локальный или Не указано. поэтому, хотя это и не является часовой пояс как таковой, это указание на то, что время выражается либо в локальной зоне, либо в универсальной временной зоне. Проверьте документ для получения дополнительной информации.

Чтобы ответить на исходный вопрос - переведите всех в один стандартный часовой пояс. UTC работает просто отлично, и это легко, потому что в BCL есть встроенные методы, но не имеет значения, какой часовой пояс вы выберете. Просто заставьте всех договориться о стандарте.

Еще одна вещь, которую вы можете сделать, это передать значения времени в виде значений "TotalSeconds", так как ... определенное время в прошлом. Как 1 января 1970 года (unix time_t) или 1 января 1601 года (windows FILETIME). Но при таком подходе подразумевается, что все сотрудничающие стороны согласны с тем, что этот начальный момент времени - UTC. Таким образом, один миллион секунд с начала («эпоха») относится к одному и тому же моменту, нахожусь ли я в Эль-Пасо, или в Нашуа, или в Токио, или в Лондоне.

0 голосов
/ 03 марта 2009

Проверьте этот вопрос, в нем есть обсуждение того, что вы хотите.

Похоже, что самый простой способ - передать часовой пояс клиента в веб-методе или просто передать все время в виде строки, а не DateTime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...