【问题标题】:ASP.NET DateTime object "changes" when passed to Javascript传递给 Javascript 时 ASP.NET DateTime 对象“更改”
【发布时间】: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


【解决方案1】:

@millimoose 我已经尝试过 DateTimeOffset 解决方案,但它并没有真正帮助。我不确定我是否 100% 正确使用它。现在对我有用的是:

在我将 DateTime(s) 从服务器发送到客户端之前,我不对 DateTime 做任何事情(例如设置 UTC)。然后,javascript 客户端会显示正确的时间。 当 javascript 将时间发送回服务器时,会增加一个小时。然后我打电话给 .ToLocalTime();在 DateTime 对象上,时间现在是正确的。

【讨论】:

    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 2012-11-05
    • 2022-01-16
    • 1970-01-01
    • 2016-01-04
    • 2013-10-30
    • 2019-11-05
    • 1970-01-01
    相关资源
    最近更新 更多