因此,欧盟正在考虑scraping the DST,并将决定权留给地方政府来决定保留冬季还是夏季。
这对于处理调度,时区转换等的现有代码库和应用程序意味着什么?
示例
假设当前取决于夏令时,我的国家/地区时间可以是+8 UTC(夏季)或+7 UTC(冬季)。 欧盟变更后,我国的时间永久+8 UTC。
如果我有计划在每天的9:00:00(当地时间)向我发送电子邮件,我可以将上午9点保存在数据库中,然后检查
if(Date.utcNow().format(H:i:s, MY_TIMEZONE) == 09:00:00) sendEmail();
无论欧盟变更后的夏季或冬季,此代码是否仍然有效?
或者,如果我在UTC上午1:00:00(+0)进行存储,则
if(Date.utcNow().format(H:i:s, UTC) == 01:00:00) sendEmail(); // actually this will NOT send at the same local time everyday, because I expect it to send at summer or winter time depending on DST.
欧盟更改后,此代码是否会在新的当地时间夏季自动永久发送?
我假设有人会修理时间服务器,但就我而言,我是否需要更新任何代码库和应用程序逻辑?
答案 0 :(得分:2)
可能不如您担心的那么可怕。
存在一个称为IANA time zone database的东西。事实证明,许多语言和库已经在使用此数据库来告诉他们有关UTC偏移量和时区规则的信息。
IANA time zone database本身不是静态的。它经常意外地更新。而且,当这样做时,依赖于它的那些平台,语言和库通常也会更新到较新的版本。因此,随着时区的变化,高级软件将继续运行。
在2018年,IANA time zone database被更新了9次。平均大约每6周一次。因此,夏令时规则的更改既不罕见(在全球范围内)也不是灾难性的。
尽管可能发生的最糟糕的事情(并与令人不安的频率有关)是一些脑瘫的政府在不到一周的时间内更改夏令时通知。然后,对于世界的那一部分,直到所有系统都有足够的时间来更新之前,对于当前时间还是有些困惑。
就欧盟而言,似乎已经在考虑周全并提前计划好了。因此,IANA time zone database和所有依赖它的系统将能够在大量时间内进行更新。
如果您知道自己的代码正在编写自己的夏时制规则逻辑,而不是依赖于时时规则不断变化的维护良好且可更新的数据库,那么明智的选择是将代码迁移掉这种自定义逻辑的速成。
至于您的问题中有关如何为定期安排的事件存储时间的部分,最佳实践是完全按照人类的意愿存储时间戳。例如,如果您希望某些事情在当地时间上午9点发生,则应将其编程为当地时间上午9点。如果您希望全局在同一时刻发生某些事情,则可能应该针对UTC进行编程。
有关此领域最佳做法的更多建议,请参见此SO answer。
更新
马特·约翰逊(Matt Johnson)使我们想起了他几年前写的一篇很棒的文章,其中包含了对脑力衰竭的政府的好的建议。如果他们曾经学会阅读,这是他们应该阅读的第一件事:https://codeofmatt.com/on-the-timing-of-time-zone-changes/