【发布时间】:2013-02-18 13:33:54
【问题描述】:
我的 ASP.NET 网络服务在我的测试环境中的本地计算机上运行。我的本地计算机 UTC 时间是 +1(丹麦)。 现在我的 javascript 客户端可以使用这些方法:
[WebMethod(EnableSession=true)]
public DateTime GetDateTime() {
return new DateTime(2013,3,15,10,0,0);
}
[WebMethod(EnableSession=true)]
public void SetDateTime(DateTime DT) {
}
当我从 javascript 调用第一个方法并提醒传递的 DateTime 时,它正确显示了上午 10 点时间:'Fri Mar 15 2013 10:00:00 GMT+0100 (Romance Standard Time)' 在此警报之后,我立即将 DateTime 对象传递回网络服务器。但是当我调试这个对象时,DateTime 现在是上午 9 点。 怎么会?客户端和服务器在同一台机器上运行。 我玩过 DateTime.SpecifyKind,但总的来说结果是一样的;当时间发送回服务器时,客户端减去一个小时。
希望您能帮助我更好地理解这个主题。
提前谢谢你。
【问题讨论】:
-
.NET 的
DateTime处理时区非常糟糕。您应该明确地传递 JS 和服务器之间的时区(虽然不确定如何使用WebMethods),始终使用 UTC,并且只在向用户显示时间时处理时区,或者尝试使用 @ 987654324@ 有帮助。 (DateTimeOffset应该能够正确识别时区,但可能不能只使用 JSON 服务。) -
你能显示你的客户端代码吗??
-
@millimoose - 所以你的意思是我应该停止使用 DateTime 作为对象,而是在两边解析日期字符串? DateTimeOffset 似乎使事情变得更加复杂?
-
@ManishMishra - javascript 代码非常简单: $(document).ready(function () { WebService.NameSpace.NameSpace.GetDateTime(CallBackFunction, CallFailed); } function CallBackFunction(DateObject) { alert (DateObject);WebService.NameSpace.NameSpace.SetDateTime(DateObject);}
-
@Farsen
DateTimeOffset的建议只是一个长期的建议 - 将其换成DateTime将立即修复您遇到的错误(然后您可以将DateTimeOffset转换为任何一种DateTime的其余代码),否则不值得进一步调查。
标签: javascript asp.net web-services utc