3

我的 Web 应用程序分为 WebGui 和 WebService。WebService 负责业务逻辑和数据库处理。从浏览器中的 Javascript 我根据从浏览器输入的日期和时间请求数据。此请求转到 WebGui 中的 .asmx Url,在此函数中调用 Web 服务。

在我的开发系统(windows xp)上,我得到了正确的数据,但是当我在测试系统上安装它时,我必须添加本地时区差异才能获得正确的数据。

例如,我想要日期和时间“21.07.2008 14:27:30”的数据,我必须发送“21.07.2008 16:27:30”。

为什么两个系统上的行为不同,我应该怎么做才能在两个系统上获得相同的行为?

  • Web GUI 在 asp.net 2.0 c# 中
  • Web 服务在 asp.net 1.1 c#

更新

由于日期和时间在 JSON 协议中发送为“/Date(1221738803000)/”,因此将日期解释为不同格式是没有问题的。这是解释/忘记时区的问题。

4

4 回答 4

3

我怀疑这与 .NET 2.0 中引入的 DateTime.Kind 属性有关。默认情况下,它设置为 DateTimeKind.Unspecified,大部分时间与 DateTimeKind.Local 处理相同,因此当日期被序列化时,它将被转换为 UTC。在将 Kind 传递给 Web 服务调用之前,您可以尝试使用 DateTime.SpecifyKind(...) 将 Kind 设置为 DateTimeKind.Utc。

于 2008-10-10T15:17:21.720 回答
1

尝试使用 Json.NET 来处理您的序列化。

请注意此处有关序列化格式的注释:

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

于 2008-10-14T19:05:28.093 回答
0

如果时区无关紧要,请将日期/时间作为格式化字符串传递,这样您就可以确切地知道它的外观,并使用 DateTime.Parse 将其转换为服务器端的 DateTime。

于 2008-10-08T22:02:14.367 回答
0

根据服务器的文化设置,日期的解释会有所不同。即给定日期:01.05.2008 en-GB(英国)的文化将日期读取为5月1日,具有en-US文化的系统将其读取为1月5日。

为了解决这个问题,您应该确保日期始终以 UTC 格式 (yyyy-mm-dd) 传输,无论文化如何,都将始终以这种方式解释。

于 2008-09-18T14:24:35.417 回答