小编典典

在SQL 2005中有效地在UTC和本地(即PST)时间之间转换日期

sql

将UTC日期时间转换为本地日期时间的最佳方法是什么?它不像getutcdate()和getdate()一样简单,因为差异取决于日期是什么。

对我来说,CLR集成也不是一个选择。

我几个月前针对这个问题提出的解决方案是拥有一个日光节约时间表,该表存储了未来100年左右的开始和结束的日光节约时间,该解决方案看起来不算什么,但转换速度很快(简单表查询)


阅读 66

收藏
2021-04-08

共1个答案

小编典典

创建两个表,然后加入其中,以将存储的GMT日期转换为本地时间:

TimeZones     e.g.
---------     ----
TimeZoneId    19
Name          Eastern (GMT -5)
Offset        -5

创建夏令时表并向其填充尽可能多的信息(当地法律一直在变化,因此无法预测未来几年数据将如何变化)

DaylightSavings
---------------
TimeZoneId    19
BeginDst      3/9/2008 2:00 AM
EndDst        11/2/2008 2:00 AM

像这样加入他们:

inner join  TimeZones       tz on x.TimeZoneId=tz.TimeZoneId
left join   DaylightSavings ds on tz.TimeZoneId=ds.LocalTimeZone 
    and x.TheDateToConvert between ds.BeginDst and ds.EndDst

像这样转换日期:

dateadd(hh, tz.Offset + 
    case when ds.LocalTimeZone is not null 
    then 1 else 0 end, TheDateToConvert)
2021-04-08