我将数据存储为UTC,但我对如何正确检索数据感到困惑。我将值存储为MSSQL中的日期时间列中的UTC。目前,我检索它的方式是将GMT偏移设置为开始日期时间范围和结束日期时间范围。我还需要将聚合应用于该日期时间字段(groupby),并将其显示在用户适当的本地时区中。我遇到的问题是,如果我今天查找一个范围,它会调出正确匹配的列,但这些列中的日期时间值可能是不同的UTC天;我按天分组。因此,例如,当有人选择一天的开始和结束(今天)的范围时,他们会看到昨天和今天的UTC日期时间值;但如果我尝试将GMT偏移应用于显示值,它仍然可能显示为两个不同的日期。如何正确协调范围和显示?
感谢
将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]
一旦我们将夏令时纳入计算,情况就会变得复杂起来。但是,如果给定的日期属于夏令时,那么上述计算将不起作用。
那么夏令时是如何计算的呢
如果年份<=2006年,夏令时介于:四月第一个星期日凌晨2点至十月最后一个星期日上午2点
如果年份>=2007,则夏令时介于:三月第二个星期日凌晨2点至十一月第一个星期日上午2点
UTC至CST(标准时间)=-6
UTC到CDT(夏令时)=-5
UTC到EST(标准时间)=-5
- UTC至EDT(黎明时间)=-4
点击此处查看处理夏令时的解决方案-http://vadivel.blogspot.com/2011/10/timezone-conversion-utc-to-cst-with.html