sql-server - 如何从时区名称中获取时区偏移量
问题描述
我有一个时区名称,例如America/Vancouver
保存在 SQL Server 数据库中。我想从 SQL 中的时区名称中获取 UTC 偏移量,比如 America/Vancouver
有-08:00
偏移量。那么如何在 SQL 中编写查询呢?非常感谢您的帮助
解决方案
不幸的是,SQL Server 还不America/Vancouver
直接支持 IANA 时区标识符(如 )。目前,最好的选择是将 IANA 标识符转换为应用程序层中相应的 Windows 时区标识符,并将其存储在 SQL Server 中。
例如,如果您在应用程序层中运行 .NET,则可以使用我的TimeZoneConverter项目:
string tz = TZConvert.IanaToWindows("America/Vancouver");
// Result: "Pacific Standard Time"
然后您可以AT TIME ZONE
在 SQL Server 代码中使用该函数:
SELECT sysdatetimeoffset() AT TIME ZONE 'Pacific Standard Time'
以上将为您提供给定时区的当前日期、时间和偏移量,您可以将其用作查询用户可用性的基础(在问题评论中提到)。
请记住,偏移调整将根据夏令时是否有效而有所不同。尽管 Windows 标识符中有“标准”一词,但在适用的情况下确实考虑了 DST。
或者,如果由于某种原因您必须完全在 SQL Server 中执行此操作而不转换到 Windows 时区,那么您将需要依赖诸如我的SqlServerTimeZoneSupport项目之类的项目。那个有点旧并且维护得不是很好,所以如果你能提供帮助,我建议不要使用这种方法。
推荐阅读
- python - Python C API:T_INT 未在此范围内声明
- java - 无法确定唯一的对象集
- ruby-on-rails - gem 更新导致错误:未定义的方法 ssl_version
- mysql - 我的查询中有一个错误,显示“字段列表中的未知列”
- vue.js - 构建 Vue.js 应用程序时 JavaScript 堆内存不足
- java - Jackson MRBean 不工作,无法构造实例
- c# - C# 更新或向注册表添加值
- unit-testing - 手动创建 JUnit Result 对象
- php - Laravel 5.8 从网址中删除 index.php
- c# - 如何在我的网站中实现任何 asp.net 的源代码用于教程目的