微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从时区名称获取时区偏移量

如何解决如何从时区名称获取时区偏移量

我在 sql Server 数据库中保存了一个时区名称,例如 America/Vancouver。 我想从 sql 中的时区名称获取 UTC 偏移量,例如 America/Vancouver 具有 -08:00 偏移量。那么如何在 sql 中编写查询呢? 非常感谢您的帮助

解决方法

将 DATEPART 与 TZ 参数一起使用。示例:

SELECT DATEPART(tz,(CAST('2021-01-01' AS DATETIMEOFFSET) AT TIME ZONE 'Central European Standard Time')); 

结果在几分钟内。

,

遗憾的是,SQL Server 尚不直接支持 IANA 时区标识符(如 America/Vancouver)。目前,最好的选择是将 IANA 标识符转换为应用层中相应的 Windows 时区标识符,并将其存储在 SQL Server 中。

例如,如果您在应用层中运行 .NET,则可以使用我的 TimeZoneConverter 项目:

string tz = TZConvert.IanaToWindows("America/Vancouver");
// Result:  "Pacific Standard Time"

然后您可以在 SQL Server 代码中使用 AT TIME ZONE 函数:

SELECT sysdatetimeoffset() AT TIME ZONE 'Pacific Standard Time'

以上将为您提供给定时区的当前日期、时间和偏移量,您可以将其用作查询用户可用性的基础(在问题评论中提到)。

请记住,根据夏令时是否生效,偏移调整会有所不同。尽管 Windows 标识符中有“标准”一词,但确实会在适用的情况下考虑 DST。

或者,如果出于某种原因您必须完全在 SQL Server 中执行此操作而不转换为 Windows 时区,那么您将需要依赖诸如我的 SqlServerTimeZoneSupport 项目之类的项目。那个有点旧而且维护得不好,所以如果你能帮忙的话,我建议不要使用这种方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。