MSSQL 2014 更改在不同时区返回日期

Posted

技术标签:

【中文标题】MSSQL 2014 更改在不同时区返回日期【英文标题】:MSSQL 2014 Change returned Date in a different time zone 【发布时间】:2021-04-20 18:35:27 【问题描述】:

我有一个查询,它返回一个日期作为列之一,但是我需要该日期位于与当前不同的时区。

 SELECT ISNULL(Value, 'NULL') AS VALUE, ISNULL(UPPER(FORMAT(start_date), 'MMM dd, yyyy hh:mm ')), 'NULL') as Start_Date FROM MY TABLE

我尝试将时间设置为 1 小时以使时间与中部时间一致(目前为美国东部标准时间)

   DATEADD(hh, -1, start_date)

当日期在夏令时内并且该时间段内的所有返回日期都被 1 小时后,问题就出现了 有没有办法转换 start_date 列以适应它?

【问题讨论】:

您写的内容不会更改时区,它会创建一个没有任何时区信息的本地化字符串。 SQL Server 已经具有时区处理功能,例如SWITCHDATEIMEOFFSET。如果你真的关心时区,最好使用datetimeoffset 类型。 在所有 SQL Server 版本中仍处于主流支持(2016 年及以上)同时使用 datetimedatetimeoffset 您可以使用 AT TIME ZONE 使用时区名称而不是任意的 @987654337 来更改时区@或模棱两可的EST。时区缩写没有标准 您也可以考虑AT TIME ZONE,但请,请,请stop using shorthand like hh - 输入hour 并没有太多工作量。还有FORMAT is incredibly inefficient;考虑one of the style numbers for convert instead(例如样式 100 很接近)。 我不能在 2016 年之前的 SQL 中使用 At TIME ZONE,该功能已添加到我正在使用的 SQL Server 2016 中 14 啊,是的,对不起,我错过了。如果您坚持使用旧版本的 SQL Server,您可能不得不使用更多的肘部油脂。例如看这个系列:part 1 | part 2 | part 3 【参考方案1】:

首先,我要指出的是,SQL Server 2014 已于 2019 年 7 月 9 日结束主流支持。您真的不应该再在生产环境中使用它了。

如果您必须继续使用它,那么您可以考虑使用我的SQL Server Time Zone Support 项目。我很久以前写的,不再维护它,所以喜欢你的服务器 - 使用风险自负。

【讨论】:

以上是关于MSSQL 2014 更改在不同时区返回日期的主要内容,如果未能解决你的问题,请参考以下文章

来自第三方设备的时区

在Java中获取当前时区的日期

如何在 Perl 中更改日期时间值的时区?

为啥 python datetime replace timezone 返回不同的时区?

获取带有时区偏移的日期

使用 django 查询返回活动时区中的日期时间