C# 通用时区
我想提供一个时区的DB表,以便UI用户可以与其中一个时区相关联,并希望了解有关存储这些时区的最佳实践的视图。显然,我们可以将windows或tzid区域名称存储为键,但这似乎是错误的,我不喜欢在数据库中存储特定于平台的信息。这些信息来自一个API,Java或windows客户端可能会使用该API,因此向Java客户端提供windows时区似乎是错误的。是否有公认的ISO标准(或类似)时区代码列表可作为主键使用 我偶然发现: 但我不确定它是否对我有帮助 是的,IANA维护定义这些标识符的一组时区信息C# 通用时区,c#,timezone,C#,Timezone,我想提供一个时区的DB表,以便UI用户可以与其中一个时区相关联,并希望了解有关存储这些时区的最佳实践的视图。显然,我们可以将windows或tzid区域名称存储为键,但这似乎是错误的,我不喜欢在数据库中存储特定于平台的信息。这些信息来自一个API,Java或windows客户端可能会使用该API,因此向Java客户端提供windows时区似乎是错误的。是否有公认的ISO标准(或类似)时区代码列表可作为主键使用 我偶然发现: 但我不确定它是否对我有帮助 是的,IANA维护定义这些标识符的一组时区
要获得有保证的权威数据集,请下载最新的软件包,并解析时区名称的
zone.tab
文件。您的问题中有几项我想评论一下:
我想提供一个时区的DB表,以便UI用户可以与其中一个时区相关联,并希望了解有关存储这些时区的最佳实践的视图
您不应该尝试在数据库中构建时区表。时区不是静态的。它们不断变化。如果你使用Windows时区,你可以通过Windows Update获得这些更新,如果你使用IANA时区,你应该是你自己。无论哪种方式,每年都有多个更新,您不应该依赖可能失去同步的辅助数据源
如果使用的是Windows区域,请迭代TimeZoneInfo.GetSystemTimeZones()
,显示DisplayName
属性,并将Id
属性与用户关联
如果您正在.Net中使用IANA区域,您(希望)正在使用,并且您会将IANA区域名称与您的用户关联(例如,America/Los_Angeles
)。您可以在单个列表中向用户显示这些信息,或按国家/地区代码进行过滤,或使用基于地图的时区选择器。请阅读更多详情
也可以读到
显然,我们可以将windows或tzid区域名称存储为密钥,但这似乎是错误的
如果使用Windows区域,则存储Id
(例如,东部标准时间
)。如果使用IANA区域,则存储全名(例如,America/New_York
)。这是没有办法的,这确实是最好的做法
另请参见,这基本上是相同的问题,但从PHP的角度来看
我不喜欢在数据库中存储特定于平台的信息。这些信息来自一个API,Java或windows客户端可能会使用该API,因此向Java客户端提供windows时区似乎是错误的
只有Windows区域是特定于平台的。如果您使用的是IANA区域,那么在任何平台上都可以。如果您的应用程序已经深深地绑定到Windows区域,那么您可以使用找到的CLDR映射来转换它们。这些也是野田佳彦的时代。如果需要,可以存储Windows时区ID,并在外部API中动态转换。或者,您可以只转换一次,然后继续使用IANA区域
是否有公认的ISO标准(或类似)时区代码列表
没有。时区没有标准。最接近的是IANA数据库。它几乎在所有地方都得到实施。我建议您在中阅读更多内容。谢谢,这看起来是正确的答案(虽然不太好——我们无法准确地引导客户)。