2

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

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

4

3 回答 3

1

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

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

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

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

更新:不确定这种情况是否准确,因此请澄清:

  • 客户端提交 DateTime 值为 '12:00:00 00:00:00 PM CST' 的请求
  • PST 中的服务器在“10:00:00 00:00:00 PM PST”接收/解释请求

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

于 2009-03-04T17:44:31.427 回答
1

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

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

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

于 2009-03-05T05:47:24.357 回答
0

看看这个问题,它有一些关于你想要什么的讨论。

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

于 2009-03-03T19:25:25.390 回答