2012-01-13 35 views
0

我真的需要一些專家的SQL幫助。我正在做一個存儲過程,一切都很好,直到我顯示它。存儲在數據庫中的所有內容均以UTC格式存儲,但我們獲得瀏覽器的GMT偏移量,這就是我們如何確定預定義的時間範圍。問題是eI使用日期來顯示,但是由於格林尼治標準時間的偏差,顯示的日期不正確,並且使人感到困惑。我將其顯示爲短日期,這裏是它改變了一部分:如何轉換設置日期以調整UTC?

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偏移。有沒有人有過這個問題,如果是的話,你使用了什麼解決方案?因爲我正在使用存儲過程,所以我非常有限。我不知道如何解決這個問題。

+0

如果你想調整時區,你需要的不僅僅是日期,否則沒有什麼可調整的。您可以預先確定時區,將信息發送到您選擇的查詢,然後調整,然後轉換爲DATE。或者返回完整的UTC並以編程方式調整。 – Ilion 2012-01-13 04:31:14

回答

0

不要以爲你應該嘗試在數據庫中解決這個問題。存儲utc日期是正確的。您應該在前端處理用戶的時間偏移(每個用戶的權利可能不同)?

前端應用程序還應該爲「今天」請求指定utc日期。