2009-03-03 84 views
2

我有一个带有日期时间参数的方法的Web服务(实际上是Silverlight启用wcf服务,但对于所有意图和目的,它是一个Web服务)。该方法从客户端调用,该客户端可能位于不同的时区。托管Web服务的服务位于太平洋标准时间,并且Web服务正在将日期时间值转换为服务器时区。 Web服务的目的是将日期时间值与数据库中的值进行比较,但数据库中的值基于客户端时区,所以由于转换,比较不起作用。.NET Web服务中的日期时间时区转换

有什么办法可以关闭转换吗?

回答

1

并且它显示Web服务正在将日期时间值转换为服务器时区。

我想确保我有这个正确的:你的Web服务方法需要一个DateTime类型的参数(如在System.DateTime中)并且正在转换传递的参数?

datetime对象不携带隐时区,所以任何决定由Web服务来推断本地时间将是一个逻辑漏洞(至少不支持时区标准)。

如果您可以提供您的服务器和客户端代码片段,它会使该场景更易于诊断。

更新:不知道这种情况是准确的,那么请澄清:

  • 客户端提交与'12 DateTime值请求:00下午12时00分00秒CST”
  • 服务器:00 PST在'10:00:00 00:00:00 PM PST'收到/解释请求'

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

+0

当日期时间序列化时,它的格式包括时区信息。 – Jeremy 2009-03-04 19:48:33

1

不完全正确,DateTime实例(结构)不带TimeZone信息。每个DateTime结构上有一个DateTimeKind属性,从.NET ... 3.0开始?我不知道版本。 “Kind”是UTC,Local或Unspecified。所以虽然它本身不是一个时区,但它是时间在本地区域或在通用时区中表达的一种行为。查看文档以获取更多信息。

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

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