2008-09-18 27 views
3

我的Web应用程序分裂在WebGui和WebService中。 WebService负责业务逻辑和数据库处理。 从浏览器的Javascript中请求数据取决于来自浏览器的输入的日期和时间。这个请求代表WebGui中的一个.asmx Url,在这个函数中调用webservice。为什么JSON中的datetime行为在不同的系统(win xp,server 2003)上有所不同?

在我的开发系统(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)/”发送。这是解释/忘记时区的问题。

回答

0

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

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

+0

这是没有解释以不同的格式的日期和时间日期的问题在JSON协议被作为“\ /日期(1221738803000) \ /”。这是解释/忘记时区的问题。 (我已经更新了这个问题) – 2008-09-18 15:44:29

0

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

3

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

+0

我目前看到DateTimeKind.Unspecified看起来被视为是UTC。如果DateTime已经在“本地”时区中,我将它转换回UTC后再返回。这似乎在服务器上运行,在本地运行,它仍然需要在返回之前转换为“本地”时区。真的很烂! – 2011-09-06 16:07:48

相关问题