【问题标题】:How to transform set date to adjust for UTC?如何转换设置日期以适应 UTC?
【发布时间】:2012-01-13 03:39:50
【问题描述】:

我真的需要一些专家的 SQL 帮助。我正在制作一个存储过程,在我显示它之前一切都很好。存储在数据库中的所有内容都以 UTC 格式存储,但是我们获得了浏览器的 GMT 偏移量,这就是我们确定预定义时间范围的方式。问题是我使用日期来显示,但是由于 GMT 偏移,显示的日期不正确,这让人们感到困惑。我将它显示为一个短日期,这是它被转换的部分:

    SELECT
        BundleEvent.BundleId,
        CAST(BundleEvent.EventDate AS DATE)
    FROM dbo.BundleEvent WITH (NOLOCK)
    JOIN dbo.BundleUser WITH (NOLOCK)
        ON BundleEvent.BundleId = BundleUser.BundleId
    WHERE BundleEvent.EventDate >= @StartTimeGmt AND BundleEvent.EventDate <= @EndTimeGmt
        AND BundleUser.UserId = CASE WHEN @UserId IS NULL THEN BundleUser.UserId ELSE @UserId END
    GROUP BY
        BundleEvent.BundleId,
        CAST(BundleEvent.EventDate AS DATE)

因为我将它作为一个短日期分组,所以我失去了转换它的能力。因此,当人们选择今天范围时,由于他们的 GMT 偏移量,他们可能会从今天和昨天得到一个日期。以前有没有人遇到过这个问题,如果有,您使用了什么解决方案?因为我正在使用存储过程,所以我非常有限。我不知道如何解决这个问题。

【问题讨论】:

  • 如果你想调整时区,你需要的不仅仅是日期,否则没有什么可调整的。您可以预先确定那里的时区,将信息发送到您的选择查询,调整然后转换为 DATE。或者返回完整的 UTC 并以编程方式进行调整。

标签: sql stored-procedures utc


【解决方案1】:

不要认为你应该尝试在数据库中解决这个问题。存储UTC日期是正确的。您应该在前端处理用户的时间偏移(每个用户的时间偏移可能不同吗?)。

前端应用程序也应为“今天”请求指定 UTC 日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多