我知道有些误导性的标题。从来没有真正想要自己存储TimeZoneInfo
对象:相反,我想存储一些与文化无关的标识符,然后可以将其用于重建TimeZoneInfo
的实例。
目前,我正在存储TimeZoneInfo.Id
属性的值,它在英语和俄语版本的Windows上似乎都没问题,但我只是想确保我做对了。
答案 0 :(得分:16)
是的,Id
是一个非本地化的标识符,因此这是一个适当的存储方式。
您应该知道一个可能的问题:标识符可能会随时间而变化。我不知道它是否是 Windows 时区标识符中的问题,但它确实发生在Olson(zoneinfo)数据库中。例如,我最近看到由“太平洋/ Ponape”改为“太平洋/波纳佩”引起的问题。
我怀疑,由于微软对ID有更严格的控制,它们更可能保持不变 - 但即便如此,各国也可以更改其名称,分成不同的国家(可能会创建新的时区)等。
我不建议针对此问题进行任何修复 - 只是将其强调为潜在问题。存储ID可能是最好的方法,但要注意潜在的风险......
答案 1 :(得分:10)
我没有看到存储ID的问题,因为它们在Windows平台上看起来是一个常量值 - 也就是说,特定ID将始终映射到同一个TimeZoneInfo
对象,无论哪个您使用的Windows版本。
我不确定单声道是做什么的,但如果情况相同,我也不会感到惊讶。您随时可以查看class source code。
答案 2 :(得分:0)
检查这两种方法
public static System.TimeZoneInfo FromSerializedString(string source)
public string ToSerializedString()
这些应该保留尽可能多的信息:)
答案 3 :(得分:-2)
我只使用了TimeZoneInfo.Id.GetHashCode()。根据测试,这会生成唯一的整数ID,可以存储在DB中。您还可以构建一个字典,其中键是这些哈希码,值是原始ID字符串,以便更容易进行反向查找。