将SQL Server DateTimeOffset转换为时区

时间:2017-01-04 15:25:59

标签: sql-server sql-server-2012

在SQL Server查询中是否可以将datetimeoffset转换为相应的时区?例如,我将值存储为:

2015-01-03 00:30 -06:00

2015-01-10 00:30 -05:00

如果夏令时有效,我希望我的sql查询显示-06:00为CST或CDT,-05:00显示为EST或EDT。

我正在编写RSS Feed,我最终希望显示结果集列:

2015年1月2日星期五18:30 CST

2015年1月9日星期五18:30美国东部时间

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

以下是使用DATEPART执行此操作的示例。如果您需要更多时区,则可能需要使用查找表并加入DATEPART的值。请记住,每个偏移都有多个时区。这些因纬度而异。

create table #TimeZoneExample
(
    MyDateTimeOffset datetimeoffset
)

insert #TimeZoneExample
select '2015-01-03 00:30 -06:00' union all
select '2015-01-10 00:30 -05:00'

select convert(datetime, MyDateTimeOffset) as PostDate
    , case DATEPART(TZoffset, MyDateTimeOffset)/60 
        when -5 then 'EST'
        when -6 then 'CST'
        when -7 then 'MST'
        when -8 then 'PST'
        else 'Unknown Time Zone'
    end
from #TimeZoneExample

drop table #TimeZoneExample

答案 1 :(得分:0)

当我不得不解决这个问题时,我意识到真正有用的唯一选择是将所有日期/时间保存为UTC,并包含一个时区指示器,该指示器与表格显示任何时区变化的时间表,例如日光节省时间,发生。这将需要您的数据的自定义代码。

幸运的是,有人维护着一个包含DST过渡等时区数据的数据库 - IANA Time Zone DB。您可以自己使用和更新原始数据,或者查看其他如何执行此操作的示例,包括GitHub上的SQL Server Timezone Support Project

最后,UTC,时区和转换数据库是确保时区之间时间的完美准确性和可转换性的唯一方法 - 尤其是那些从UTC转换15分钟或1/2小时的罕见TZ。