Почему поведение datetime в JSON отличается в разных системах (win xp, server 2003)? - PullRequest
3 голосов
/ 18 сентября 2008

Мое веб-приложение разделено на WebGui и WebService. WebService отвечает за управление бизнес-логикой и базой данных. Из Javascript в браузере я запрашиваю данные в зависимости от даты и времени, которые являются входными данными из браузера. Этот запрос передается URL-адресу .asmx в WebGui, и внутри этой функции вызывается веб-служба.

В моей системе разработки (windows xp) я получаю правильные данные, но когда я устанавливаю их в тестовую систему, мне нужно добавить разницу в часовом поясе для получения нужных данных.

Например, мне нужны данные для даты и времени '21 .07.2008 14:27:30 'Мне нужно отправить '21 .07.2008 16:27:30'.

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

  • Веб-интерфейс в asp.net 2.0 c #
  • Веб-сервис на asp.net 1.1 c #

Обновление

Это не проблема интерпретации даты в разных форматах, поскольку дата и время отправляются в протоколе JSON как "/ Date (1221738803000) /". Это проблема интерпретации / забвения часового пояса.

Ответы [ 4 ]

3 голосов
/ 10 октября 2008

Я подозреваю, что это связано со свойством DateTime.Kind, представленным в .NET 2.0. По умолчанию это значение DateTimeKind.Unspecified, которое в большинстве случаев обрабатывается так же, как DateTimeKind.Local, поэтому при сериализации даты она будет преобразована в UTC. Вы можете попытаться установить Kind в DateTimeKind.Utc, используя DateTime.SpecifyKind (...), прежде чем передать его вызову веб-службы.

1 голос
/ 14 октября 2008

Попробуйте использовать Json.NET для обработки вашей сериализации.

Обратите внимание на комментарии, касающиеся форматов сериализации:

http://james.newtonking.com/archive/2008/08/25/json-net-3-0-released.aspx

0 голосов
/ 09 октября 2008

Если часовой пояс не имеет значения, вместо этого передайте дату / время в виде отформатированной строки, чтобы точно знать, как она будет выглядеть, и используйте DateTime.Parse, чтобы превратить его в DateTime на стороне сервера.

0 голосов
/ 18 сентября 2008

В зависимости от настроек языка сервера дата будет интерпретироваться по-разному. То есть с учетом даты: 01.05.2008 культура en-GB (британская) будет читать дату как первое мая, система с культурой en-US будет читать ее как 5 января.

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

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