对于 DST 之前或之后的日期,如何获得 UTC 和本地时间之间的正确偏移量?

问题描述

sql Server 2016 之前,将非当前 UTC 日期转换为本地时间的最佳方法是使用 Microsoft .Net 公共语言运行时或 CLR。

代码本身很简单;困难的部分通常是让人们相信 CLR 不是纯粹的邪恶或可怕......

不幸的是,在 sql Server 2016 之前没有任何内置可以处理这种类型的转换,除了基于 CLR 的解决方案。你可以编写一个 T-sql 函数来做这样的事情,但是你必须自己实现日期更改逻辑,我认为这绝对不容易。

解决方法

我目前使用以下方法从 UTC 日期时间获取本地日期时间:

SET @offset = DateDiff(minute,GetUTCDate(),GetDate())
SET @localDateTime = DateAdd(minute,@offset,@utcDateTime)

我的问题是,如果夏令时发生在GetUTCDate()和之间@utcDateTime@localDateTime最终会休息一个小时。

是否有一种简单的方法可以将非当前日期的日期从 UTC 转换为当地时间?

我正在使用 SQL Server 2005