【发布时间】:2010-09-22 20:08:44
【问题描述】:
我有一个 winform 客户端和 wcf 服务,它们一起显示历史数据。使用 UTC 时间戳存储在数据库中的数据。如果不同时区的两个客户想要根据他们的当地时间查看最近一天的数据,他们是否有可能查看不同的数据集?
【问题讨论】:
我有一个 winform 客户端和 wcf 服务,它们一起显示历史数据。使用 UTC 时间戳存储在数据库中的数据。如果不同时区的两个客户想要根据他们的当地时间查看最近一天的数据,他们是否有可能查看不同的数据集?
【问题讨论】:
这取决于。
例子:
event 1 event 2 +---- service request
| | v
|---------------|---------------|- days in Central Europe
--------|-----------------|------- days in the US (Pacific time)
---------------|---------------|-- UTC day boundaries
在情况 1 中,您只需从提出服务请求的 24 小时后返回。很容易看出,美国和欧洲的两个客户都将获得相同的事件列表。
在情况 2 中,情况更加困难:就美国时间而言,事件 1 和事件 2 发生在同一天。就欧洲而言,这两个事件发生在不同的日子,因此美国客户和欧洲客户的结果会有所不同。
【讨论】:
没有更多细节,答案是两者兼而有之。
如果一天在本地时区中定义,然后在向数据库发出请求之前更改为 UTC 格式,它们将具有不同的数据集。
如果查询类似于
select * from dbTable where TimeStamp >= '9/22/2010' and TimeStamp < '9/23/2010'
或
select * from dbTable where TimeStamp >= GetDate() - '24:00:00' and TimeStamp < GetDate()
那么它们将为两个时区返回相同的数据集。
【讨论】:
这当然是可能的 - 这是全球化/本地化的常见问题之一。 重要的是在进行查询之前将所有请求转换为 UTC 时间。如果查询都是基于 UTC 的,那么返回到本地机器的数据应该匹配,因为 UTC 时间将匹配。
【讨论】: