获取任何时区的DST开始和结束日期

时间:2017-09-15 17:24:28

标签: sql sql-server sql-server-2016 dst

我看到这个问题相当多,但没有看到任何实际的答案(大多数解决方案都是针对美国时区的。)

在给定年份和时区的情况下,SQL Server中是否有办法获取夏令时的开始和结束日期?

总结一下,我想看看是否有人为以下两个程序/功能提出了解决方案:

datetime2 getDSTStartDate(@year int, @timeZone varchar)
datetime2 getDSTEndDate(@year int, @timeZone varchar)

1 个答案:

答案 0 :(得分:2)

我猜它确实不可能得到准确的日子。有国家和地区差异,有些地方甚至根本没有观察夏令时。它通常在规定的日期和时间 ,但它可以在一年中改变。那么你的日期时间计算并不重要。

https://www.timeanddate.com/time/dst/2017.html

见该页的第二段:

  

请注意,此列表可能不是最终的 - 国家,地区和   国家有时会做出几天或几天宣布的调整   在时间变化前几周。

仅这一陈述就表明内部数据库功能很容易变得过时而没有意义。

您可以完成过去的日期,因为它们已经完成,但如下图所示,未来的日期虽然现在有些设定,但可能会发生变化,无法准确预测。

** Country Counts For Last 3 Years **
---------------------------------------------------------------
|                         **2017**                            |
---------------------------------------------------------------
|                DST Observance                 |Count|Example|
---------------------------------------------------------------
|No DST at all                                  | 172 | China |
|At least one location observes DST             |  77 | USA   |
|All locations observe DST some part of the year|  67 | Iran  |
|Many locations observe DST part of the year    |   9 | USA   |
|At least one location observes DST all year    |   1 |       |
|All locations observe DST all year             |   1 | Chile |
---------------------------------------------------------------

---------------------------------------------------------------
|                         **2016**                            |
---------------------------------------------------------------
|                DST Observance                 |Count|Example|
---------------------------------------------------------------
|No DST at all                                  | 171 | China |
|At least one location observes DST             |  77 | USA   |
|All locations observe DST some part of the year|  69 | Iran  |
|Many locations observe DST part of the year    |   8 | USA   |
---------------------------------------------------------------

---------------------------------------------------------------
|                         **2015**                            |
---------------------------------------------------------------
|                DST Observance                 |Count|Example|
---------------------------------------------------------------
|No DST at all                                  | 168 | China |
|At least one location observes DST             |  80 | USA   |
|All locations observe DST some part of the year|  70 | Iran  |
|Many locations observe DST part of the year    |   9 | USA   |
|At least one location observes DST all year    |   1 |       |
|All locations observe DST all year             |   1 | Chile |
---------------------------------------------------------------

注意:由于上述变幻莫测,并且您还必须以编程方式确定用户的输入位置,因此最好以UTC格式存储日期时间或其他通用格式并根据需要使用它。 SQL可能不是最好的解决方法。