2012-01-23 37 views
2

我将数据存储为UTC,但我很困惑如何正确检索它。我将该值存储为MSSQL中日期时间列中的UTC。目前,我检索它的方式是将GMT偏移量设置为开始日期时间范围和结束日期时间范围。我还需要将聚合应用于该日期时间字段(group by),并将其显示在用户适当的本地时区中。我遇到的问题是如果我今天查找范围,它会提取正确匹配的列,但这些列中的日期时间值可能与UTC天不同;我正在分组。因此,例如,当某人选择一天的开始时间和结束时间(今天)时,它们将显示来自昨天和今天的UTC日期时间值;但如果我尝试将GMT偏移量应用于显示值,它仍然可能出现2个不同的日期。我怎样才能正确地协调范围和显示?如何正确存储UTC日期时间并使用本地偏移量?

由于

回答

5

转换UTC格式日期到CST或EST(例如)的标准时间是直线前进。我们必须将偏移值存储在我们应用程序中所需的每个时区的单独列或表中。

例如:UTC到CST是-6小时。 UTC到EST的时间同样是-5小时。

DECLARE @UTC_Date DATETIME 
SET @UTC_Date = GETUTCDATE() 

SELECT 
@UTC_Date AS [UTC], 
DATEADD(hh, -6, @UTC_Date) AS [CST - Standard Time], 
DATEADD(hh, -5, @UTC_Date) AS [EST - Standard Time] 

一旦我们在夏令成计算把它变得复杂。但是,如果给定的日期属于夏令时,则上述计算将不起作用。

那么夏令时是如何计算的?

  1. 如果一年< = 2006年则实行夏令时间: 凌晨2点第一个星期日四月至凌晨2点的最后一个星期日

    十月
  2. 如果年份> = 2007,然后夏令之间: 凌晨2点在三月第二个星期日,直到凌晨2点第一个星期日十一月

  3. UTC到CST(标准时间)= -6

  4. UTC至CDT(夏令时)= -5

  5. UTC到EST(标准时间)= -5

  6. UTC到EDT(夏时制时间)= -4

检查出该解决方案在这里处理夏令时 - http://vadivel.blogspot.com/2011/10/timezone-conversion-utc-to-cst-with.html

相关问题