我刚刚开始与NodaTime合作。在我的应用中,用户创建一个事件并选择一个时区。无论我是使用BCL(Windows)时区列表还是TZDB(Olson)列表(并且不要混用它们!),我都需要将时区的id保存到我的数据库中,以便稍后我可以重新创建时区 - 意识到时间。
鉴于时区ID似乎有点武断,并且不是ISO标准,我可以依赖在将来调用GetZoneOrNull时始终找到该ID吗?
我假设GetZoneOrNull方法可以防御这种情况;也就是说,当它传递一个在自己的Ids集合中不存在的id时。我的问题是:如果从Ids集合中检索到一个id,我可以相信GetZoneOrNull将来永远不会返回null吗?
但如果一个Id可以从历史中消失,那么处理这个问题的最佳策略是什么?
答案 0 :(得分:6)
显然,如果你在windows的时区和TZDB之间切换,那么时区ID将会有所不同。 Olson时区ID应该是稳定的,不应该改变。即使我这么说,过去也有变化,但旧的ID仍然存在,并且是新的Ids的别名。所有“地区/城市”ID都是新的风格,选择该方案是为了不再需要改变。旧ID有时根据时区的合法名称命名,可能会发生变化。
我们将时区的Olson Id存储在我当前项目的表格中。
我无法代表Windows时区ID。