首页 > 解决方案 > 如何从时区名称中获取时区偏移量

问题描述

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

标签: sql-serversql-server-2008sql-server-2005timezonetimezone-offset

解决方案


不幸的是,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项目之类的项目。那个有点旧并且维护得不是很好,所以如果你能提供帮助,我建议不要使用这种方法。


推荐阅读