|
|
1
1
每个人都已经对总是改变DST的问题发表了评论。但我可以接受这样一个前提:我们只是假装目前已知的规则将永远适用。 要获取DST信息,首先要计算未来日期的年/月/日(如果它还不在该表单中)。然后查找时区,并根据UTC、DST开/关规则和偏移量提取变化。根据年份的不同,可能有几个不同的规则,你一定要为你的“目标”年份选择一个合适的规则。出于以下原因,了解上一年的规则可能会很方便。 开/关规则将有一个有趣的规范,如“Oct lastSun”:这意味着开关发生在10月最后一个星期天的晚上。 您需要做的是收集所有这些简洁格式的“规则”,并为每个规则开发一些代码来确定 该规则所指的最后日期 . 现在是12月,所以考虑到我所在时区的一些规则,比如“Mar lastSun”和“Oct lastSun”,日期是2009年3月29日和2009年10月25日。这些日期中哪一个是最近的?十月。十月是一个“关”,所以我们现在必须没有夏令时。
最糟糕的情况是,您必须重复上一年的两个规则计算。但是没有其他的搜索,所以严格来说是O(1)。 我在这里找到一个Local/DST/Tz计算器: http://home-4.tiscali.nl/~t876506/WhatDay.html 由于它是一个JavaScript小程序,您应该能够简单地复制代码。但它不能处理所有规则,因此您需要为其余规则添加一些代码。 更新: |
|
|
2
0
你的首要问题是当地政府制定的日光节约规定。后者几乎可以在任何时候通过任何法律,因此以一种你无法预测的方式改变规则。 |
|
|
3
0
Doomsday Algorithm 找出给定年份的星期几,并从中计算转换日期。然后可以确定DST在源和/或目标区域设置中是否有效。converion本身只是一个简单的加和/或减一个小时来补偿DST,然后将时区差异考虑在内的问题。 |
|
|
4
0
嗯,正如我所见,问题的关键是确定一天的工作日,在遥远的将来。 为此,我建议这样做:
当你有了那年1月1日的工作日之后,你就可以计算DST的转换日期了,正如Carl Smotricz所写的。 |
|
|
M. W. · 游戏保存中的C#UTC转换和夏令时 8 年前 |
|
|
cloudseeker · 利用夏令时准确处理之前的本地记录时间 8 年前 |
|
|
pzin · Rails没有应用夏令时 10 年前 |
|
Mehran · 消除跨浏览器解决方案Javascript夏令时差距 11 年前 |
|
|
Nikolay Mamaev · 2014年三星智能电视固件的时区和DST问题 12 年前 |
|
|
Ben · JSFiddle报告的时间与浏览器不同 12 年前 |
|
|
Hiren Solanki · CRM 2011,插件和DST中的日期 12 年前 |