2012-11-09 99 views
5

我刚刚开始与NodaTime合作。在我的应用程序中,用户创建一个事件并选择一个时区。无论我使用BCL(Windows)时区列表还是TZDB(Olson)列表(并且不要混合它们!),我都需要将时区id保存到我的数据库中,以便稍后重新创建时区 - 意识到时间。将时区id存储在数据库中安全吗?还是可以改变?

考虑到时区ID似乎有些随意,而且不是ISO标准,我可以依靠我以后在调用GetZoneOrNull时总是找到该ID吗?

我假设GetZoneOrNull方法是针对这种情况的防御;也就是说,当它传递一个不存在于它自己的Ids集合中的ID时。我的问题是:如果从ID集合中检索到ID,我可以相信GetZoneOrNull将来永远不会返回null吗?

但是如果一个Id可以从历史中消失,那么最好的策略是什么?

回答

6

显然,如果您在Windows的时区和TZDB之间切换,那么时区ID将会不同。奥尔森时区Ids是为了稳定,不应该改变。即使我这样说,过去有过变化,但老旧的ID仍然存在,并且是新的别名。所有的“地区/城市”ID都是新风格,并且选择了这个方案,这样他们就不用再改变了。旧ID有时根据时区的法定名称命名,这些名称可能会发生变化。

我们将时区的Olson Id存储在当前项目的表格中。

我不能说windows时区id。

+0

我会选择TZDB或Windows,倾向于奥尔森诚实,以防万一我需要与外界通话。我喜欢这样一个事实,即他们将旧的ID与新的ID相混淆,这让问题消失了。我不确定Windows是否会采用相同的约定,但您希望如此。由于这个疑问,我打算使用奥尔森。谢谢。 –

相关问题