【问题标题】:Time zone name in SQL Server 2008SQL Server 2008 中的时区名称
【发布时间】:2013-01-21 22:44:44
【问题描述】:

SQL Server 2008 R2 上的 SQL 代码中是否可以获取当前时区的名称,例如"Eastern Standard Time""EST"?我知道我可以通过计算getdate()getutcdate() 之间的差异来确定数字本地时间偏移量,但这不是我需要的。我只需要来自底层操作系统的 TZ 名称。

【问题讨论】:

  • 使用 SQL CLR 可以做到这一点,但为什么在 SQL 中需要它呢?在您的应用程序代码中执行此操作会容易得多。
  • @MattJohnson 当然,有很多方法可以在其他语言中获取时区,但由于我的应用程序的具体情况,我需要在存储过程中的 SQL 代码中专门使用这个
  • 然后将列表放入表格中。
  • 请参阅this question,了解如何从 SQL Server 使用 TimeZoneInfo。到达那里后,只需点击 TimeZoneInfo.Local.IdTimeZoneInfo.Local.DisplayName,具体取决于您想要什么。

标签: sql-server sql-server-2008 time timezone


【解决方案1】:

没有任何定义的表,如果你只是想从系统信息中读取时区信息,那么可以从系统注册表中读取。

declare @TZName varchar(50)

exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE',
'SYSTEM\CurrentControlSet\Control\TimeZoneInformation',
'TimeZoneKeyName',@TZName OUT

select @TZName

拉吉

【讨论】:

  • 我看过那篇文章——它没有回答我的问题,也没有任何帮助。我不需要时区列表,也不关心时区偏移值。单个偏移值(相对于 UTC)对应于多个不同的时区,它们在一年中的不同时间是不同的,因此 TZ 列表没有帮助。
  • 注册表方法有效,谢谢 - 这就是我真正需要的。请从您的答案中删除提及 MSDN 博客和 tz 列表,以免混淆未来的读者。
  • 已删除。但是,注册表方法可能需要提升权限。您能否将答案标记为已接受?
  • 请注意,直到 Windows Vista 和 Windows Server 2008 才引入此注册表值。如果您支持 Windows 2003 服务器,则无法通过这种方式获得。另外,请阅读this related kb article。还有一点,key nameid - 这并不总是显示给用户的正确值。 See the list here。例如,我住在亚利桑那州,虽然显示名称是 Arizona,但 ID 是 US Mountain Standard Time。对于使用夏令时的地方,id 也不会显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 2013-02-24
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多