【问题标题】:Determine current DST status when I don't observe DST in my timezone (SQL Server)当我在我的时区没有观察到 DST 时确定当前 DST 状态(SQL Server)
【发布时间】:2012-03-06 22:07:57
【问题描述】:

我正在从全国各地的多个不同服务器接收数据馈送,并且这些项目带有 GMT 时间戳。我知道每个位置的标准时间的 GMT 偏移量,但我不确定哪些位置支持/观察夏令时。通常,我只需检查我的本地时间以查看偏移量,然后从那里开始 - 由于当前与 GMT 的偏移量,我可以轻松确定当前是否观察到 DST) - 除了我的服务器位于 DST 的亚利桑那州没有观察到。因此,无论 DST 当前是否处于活动状态,我始终是 GMT-7。

当我的本地服务器不改变时间时,是否有一种简单的方法可以确定是否正在观察 DST?如果需要,我什至可以编写一个 .NET SQL-CLR 组件来检查系统上的某些内容,但如果可能的话,我最好直接从 T-SQL 代码中完成。

【问题讨论】:

    标签: sql-server tsql timezone dst


    【解决方案1】:

    很遗憾,SQL Server 没有提供明确的 DST 标志或函数。

    但是,在今年 DST 生效后,您可以为每个服务器编译一个新的偏移列表datediff(hh,getutcdate(),getdate()),并将其与您当前的标准时间偏移列表进行比较。然后,您可以在任何看到更改的地方推断 DST 遵守情况。

    希望这会有所帮助!

    【讨论】:

    • 我希望避免这种情况,但这是有可能的 - 我知道每个数据流的来源,所以我可以在每个时区选择一个服务器并跟踪它对这个问题的响应,然后相应地调整日期时间值。感谢您的建议。
    • 不客气。我认为您需要检查所有服务器,因为 DST 遵守可能会在一个时区内发生变化,例如印第安纳波利斯。
    • 问题是 SQL Server 不是发送流的东西,而且我没有与每个源在同一个城市的 SQL Server。它充其量只是近似值,所以我想我可能会存储调整后的时间和假定的偏移量,所以如果由于某种原因偏移量不正确,我以后可以随时轻松地更改它。
    猜你喜欢
    • 2017-09-20
    • 2015-07-22
    • 2015-12-19
    • 2014-04-15
    • 1970-01-01
    • 2013-03-13
    • 2016-04-10
    • 2011-09-24
    • 1970-01-01
    相关资源
    最近更新 更多