我看到这个问题相当多,但没有看到任何实际的答案(大多数解决方案都是针对美国时区的。)
在给定年份和时区的情况下,SQL Server中是否有办法获取夏令时的开始和结束日期?
总结一下,我想看看是否有人为以下两个程序/功能提出了解决方案:
datetime2 getDSTStartDate(@year int, @timeZone varchar)
datetime2 getDSTEndDate(@year int, @timeZone varchar)
答案 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可能不是最好的解决方法。