【问题标题】:a days's worth of data in diff local times不同当地时间一天的数据
【发布时间】:2010-09-22 20:08:44
【问题描述】:

我有一个 winform 客户端和 wcf 服务,它们一起显示历史数据。使用 UTC 时间戳存储在数据库中的数据。如果不同时区的两个客户想要根据他们的当地时间查看最近一天的数据,他们是否有可能查看不同的数据集?

【问题讨论】:

    标签: c# datetime utc


    【解决方案1】:

    这取决于。

    1. 如果“一天的价值”表示“过去 24 小时”,那么他们将看到相同的数据。
    2. 如果“一天的价值”表示“用户当地时区(当前日期 - 1)的 00:00-23:59”,那么他们可能查看不同的数据。

    例子:

          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 发生在同一天。就欧洲而言,这两个事件发生在不同的日子,因此美国客户和欧洲客户的结果会有所不同。

    【讨论】:

    • 你好 Heinzi,你能解释一下这两种情况有什么区别吗?
    • @user428468:编辑了我的答案。
    • hmm 这样就更清楚了。所以从你的解释来看,我想实现第二种情况,这会因为你刚才说的同样的原因而变得困难。在这种情况下,我需要通知用户,即使他/她可能在本地时间查找 1 天的数据,数据库上仍有一些更新的数据可用。这是一个好的解决方案吗?
    【解决方案2】:

    没有更多细节,答案是两者兼而有之。

    1. 如果一天在本地时区中定义,然后在向数据库发出请求之前更改为 UTC 格式,它们将具有不同的数据集。

    2. 如果查询类似于

      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() 
      

      那么它们将为两个时区返回相同的数据集。

    【讨论】:

      【解决方案3】:

      这当然是可能的 - 这是全球化/本地化的常见问题之一。 重要的是在进行查询之前将所有请求转换为 UTC 时间。如果查询都是基于 UTC 的,那么返回到本地机器的数据应该匹配,因为 UTC 时间将匹配。

      【讨论】:

        猜你喜欢
        • 2017-09-25
        • 2013-03-18
        • 2015-12-12
        • 1970-01-01
        • 2016-01-19
        • 1970-01-01
        • 2020-09-09
        • 2015-09-03
        • 1970-01-01
        相关资源
        最近更新 更多