开发者社区> 问答> 正文

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

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

CLR集成也不是我的选择。

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

展开
收起
心有灵_夕 2019-12-25 21:04:53 825 0
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)
    
    2019-12-25 21:05:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载