.net Web服务中的日期时区转换

时间:2009-03-03 19:13:56

标签: .net web-services datetime timezone

我有一个Web服务(实际上是一个支持wcf服务的银色服务,但是出于所有意图和目的,它是一个Web服务),其方法采用了datetime参数。该方法从客户端调用,该客户端可能位于不同的时区。托管Web服务的服务处于太平洋标准时间,并且Web服务似乎正在将日期时间值转换为服务器时区。 Web服务的目的是将datetime值与数据库中的值进行比较,但数据库中的值基于客户端时区,因此由于转换,比较不起作用。

有没有办法关闭转换?

3 个答案:

答案 0 :(得分:1)

  

并且Web服务似乎正在将日期时间值转换为服务器时区。

我正在尝试确保我有正确的做法:您的Web服务方法采用DateTime类型的参数(如System.DateTime)并转换传递的参数?

DateTime对象没有隐式时区,因此Web服务推断当地时间的任何确定都是一个逻辑缺陷(至少不支持时区标准。)

如果您可以提供服务器和客户端代码段,则可以使方案更容易诊断。

更新:不确定此方案是否准确,请澄清:

  • 客户提交日期时间值为'12:00:00 00:00:00 PM CST'
  • 的请求
  • PST中的服务器在太平洋标准时间'10:00:00 00:00:00 PM'
  • 接收/解释请求

如果是这种情况,您可以将所有数据转换为UTC时间吗?如果您正在执行查询查找,这意味着也会将存储的数据转换为UTC。

答案 1 :(得分:1)

DateTime实例(结构)不携带TimeZone信息并不完全正确。每个DateTime结构都有一个DateTimeKind属性,从.NET ... 3.0开始?我不知道版本。 “种类”是UTC,本地或未指定。因此,虽然它本身不是TimeZone,但是时间是在本地区域或通用时区中表示的。查看文档以获取更多信息。

回答原始问题 - 将每个人转换为单个标准时区。 UTC工作得很好,并且很容易,因为BCL内置了一些方法,但是你选择的时区并不重要。让每个人都同意一个标准。

您可以做的另一件事是将时间值作为“TotalSeconds”值传输,因为......过去的某个特定时间。像1970年1月1日(unix time_t),或1601年1月1日(windows FILETIME)。但在这种方法中隐含的是,所有合作方都同意这个开始时间点是UTC。因此,自开始以来的一百万秒(“时代”)指的是我在埃尔帕索或纳舒厄,东京或伦敦的同一时刻。

答案 2 :(得分:0)

看看这个问题,它讨论了你想要的东西。

看起来最简单的方法是在web方法中传递客户端时区,或者只将整个时间作为字符串而不是DateTime传递