获取任何时区的 DST 开始和结束日期
Posted
技术标签:
【中文标题】获取任何时区的 DST 开始和结束日期【英文标题】:Get DST Start and End Date for any Timezone 【发布时间】:2018-02-24 22:51:44 【问题描述】:我看到这个问题问了很多,但没有看到任何实际答案(大多数解决方案专门针对美国时区)。
在给定年份和时区的情况下,SQL Server 中是否可以获取夏令时的开始和结束日期?
总而言之,我正在寻找是否有人为以下两个过程/功能提出了解决方案:
datetime2 getDSTStartDate(@year int, @timeZone varchar)
datetime2 getDSTEndDate(@year int, @timeZone varchar)
【问题讨论】:
对于不执行夏令时的地点...比如整个亚利桑那州呢? 【参考方案1】:我猜想得到确切的日期是不可能的。有国家和地区的差异,有些地方甚至根本不遵守夏令时。它通常在规定的日期和时间,但在一年中可能会发生变化。那么你的日期时间计算就无关紧要了。
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 可能不是解决所有问题的最佳场所。
【讨论】:
为了增加乐趣,大图表末尾的注释说:* Some locations have multiple periods of DST: the start of the first period and end of the last period are listed.
以上是关于获取任何时区的 DST 开始和结束日期的主要内容,如果未能解决你的问题,请参考以下文章
如何确定 DST 何时在 Python 中的特定位置开始或结束? [复制]