У меня есть веб-служба ASP.NET, которая запускается на моем локальном компьютере в моей тестовой среде. Моим локальным компьютерам время UTC равно +1 (denmark). Теперь у меня есть эти методы, доступные для моего яваскрипта клиента:Объект ASP.NET DateTime «изменяется» при передаче в Javascript
[WebMethod(EnableSession=true)]
public DateTime GetDateTime() {
return new DateTime(2013,3,15,10,0,0);
}
[WebMethod(EnableSession=true)]
public void SetDateTime(DateTime DT) {
}
Когда я называю первый метод из яваскрипт и оповещения пропущенный DateTime, он правильно показывает время 10 AM: «Пт Мар 15 2013 10:00: 00 GMT + 0100 (Romance Standard Time) ' Сразу после этого предупреждения я передаю объект DateTime обратно на веб-сервер. Но когда я отлаживаю этот объект, DateTime теперь 9 часов. Почему? Клиент и сервер работают на одном компьютере. Я играл с DateTime.SpecifyKind, но в целом результат тот же; клиент вычитает час, когда время отправляется обратно на сервер.
Надеюсь, вы сможете помочь мне лучше понять эту тему.
Заранее спасибо.
.NET 'DateTime' обрабатывает часовые пояса ужасно. Вы должны либо явно пропустить часовую зону между JS и сервером (не совсем уверенно, как с помощью WebMethod, хотя), использовать UTC всюду и обрабатывать только часовой пояс при представлении времени пользователю, либо попытаться использовать ' DateTimeOffset' помогает. ('DateTimeOffset' должен быть правильно осведомлен о времени, но может не просто работать с сервисом JSON.) – millimoose
вы можете показать свой код на стороне клиента ?? –
@millimoose - Значит, вы имеете в виду, что я должен прекратить использовать DateTime в качестве объекта и вместо этого синтаксировать строки даты с обеих сторон? Кажется, что DateTimeOffset усложняет tings еще больше? – Farsen