如果我们的政府改变DLS的开始时间,NodaTime如何处理未来的日期?

时间:2015-11-20 05:35:18

标签: nodatime

如果我使用NodaTime将未来的日期和时间转换为UTC,它将使用该未来日期的偏移(从全局偏移数据库中获知),如果突然发生特定时区的未来偏移因为政府更改或国家公投改变了它(就像在澳大利亚的QLD和SA中可能发生的那样)?现在我所有的未来日期都会因他们所做的任何改变而消失......似乎不太可能,但考虑到它仍然是一个有效的场景......

1 个答案:

答案 0 :(得分:2)

首先,您需要更新数据以了解更改,并在代码中获取适当的IDateTimeZoneProvider。对此的说明是in the user guide,但我们希望将来更简单。特别是:

  • IANA发布源数据的新版本时,我们已经构建并发布了新的数据文件
  • 我们希望创建一个Nuget包,它也可以在每个新的源数据发布上更新;这将允许具有常规部署的用户在每个构建中获取最新的构建,留下相对较小的时间窗口,使其过时
  • 我们可能会为您提供构建基块,以便以某种形式进行应用投票和自我更新
  • 我们很可能在CDN上托管文件,而不是仅仅在Noda Time网站上托管文件

这就是获取新数据的问题。你如何使用它是另一回事。如果已在数据库中存储了UTC,则稍后将新的时区数据应用于相同的时间戳时,最终会获得不同的本地时间。如果这不是您想要发生的事情 - 如果您的应用处理用户在当地时间安排事件 - 那么您应该存储本地时间和时区,以便更改时区数据是指事件发生时的瞬间变化,而不是对发生事件的当地时间的变化。当然,你需要考虑如果有人在 存在的当地时间安排一个事件会发生什么,但后来证明是一个"跳过的时间"时钟调整过去的地方。 Noda Time不能为您做出这些选择,但它确实允许您使用ZoneLocalMappingResolver代表轻松地表达您的决定,可能是通过Resolvers类创建或获得的。{/ p>