2013-03-04 2 views
2

У меня есть веб-служба 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, но в целом результат тот же; клиент вычитает час, когда время отправляется обратно на сервер.

Надеюсь, вы сможете помочь мне лучше понять эту тему.

Заранее спасибо.

+0

.NET 'DateTime' обрабатывает часовые пояса ужасно. Вы должны либо явно пропустить часовую зону между JS и сервером (не совсем уверенно, как с помощью WebMethod, хотя), использовать UTC всюду и обрабатывать только часовой пояс при представлении времени пользователю, либо попытаться использовать ' DateTimeOffset' помогает. ('DateTimeOffset' должен быть правильно осведомлен о времени, но может не просто работать с сервисом JSON.) – millimoose

+0

вы можете показать свой код на стороне клиента ?? –

+0

@millimoose - Значит, вы имеете в виду, что я должен прекратить использовать DateTime в качестве объекта и вместо этого синтаксировать строки даты с обеих сторон? Кажется, что DateTimeOffset усложняет tings еще больше? – Farsen

ответ

0

@millimoose Я попробовал решение DateTimeOffset, но это действительно не помогло. Я не уверен, правильно ли я использовал его на 100%. Что теперь работает для меня, так это:

Прежде чем отправить DateTime (ы) с сервера на клиент, я ничего не делаю для DateTime (например, установка UTC). Затем клиент javascript показывает правильное время. Когда javascript отправляет время назад на сервер, добавляется час. Затем я вызываю .ToLocalTime(); в объекте DateTime, и теперь время верное.

Смежные вопросы