将joda时区映射到windows时区(例如在c#中)
本文关键字:时区 joda 映射 windows | 更新日期: 2023-09-27 18:03:55
我在将joda时区映射到windows时区时遇到问题。
我使用CLDR映射的xml,它适用于大多数翻译。
然而,它没有几个joda时区的值:
美国/印第安纳州/印第安纳波利斯,BST,澳大利亚/维多利亚,环球,澳大利亚/新南威尔士州,美国/fort wayne,非洲/阿斯马拉,美国/肯塔基州/路易斯维尔,亚洲/喀什,美国/太平洋,澳大利亚/西部,澳大利亚/昆士兰,澳大利亚/南部,美国/东部,美国/中部,美国/亚利桑那州,澳大利亚/塔斯马尼亚州,新西兰,美国/山区,澳大利亚/欧几拉,格林尼治标准时间,日本,CAT等/GMT+0, CST, PST, EST,澳大利亚/堪培拉,墨西哥/通用,以色列,加拿大/东部等/GMT+9,加拿大/中部,澳大利亚/北
我在哪里可以找到这些joda时区到windows时区之间的映射?
检查
/common/bcp47/timezone.xml
文件中的区域。如果它不是
alias
字段中的第一个条目,则使用第一个条目。例子:<type name="aumel" description="Melbourne, Australia" alias="Australia/Melbourne Australia/Victoria"/>
您可以看到
Australia/Victoria
作为第二项,因此它是Australia/Melbourne
的别名。请注意,CLDR的规范区域与TZDB的规范定义并不完全匹配,因此使用这些CLDR映射—而不是来自TZDB的link
条目。现在检查
/common/supplemental/windowsZones.xml
文件。例子:<mapZone other="AUS Eastern Standard Time" territory="AU" type="Australia/Sydney Australia/Melbourne"/>
type
字段包含一个或多个tzdb zone。other
字段包含对应的Windows区域请注意,不是所有的tzdb区域都有一个有效的对应的Windows区域,并且有些不是完美的映射。
不完全映射的例子:
America/Havana
=>Eastern Standard Time
- 夏时制转换日对齐,但古巴在午夜而不是凌晨2点转换
不可映射区域示例:
Australia/Lord_Howe
- 存在于timezone.xml中,但不存在于windowsZones.xml中。
- 当前没有此位置的Windows时区条目。
您的列表中有一些项目(
BST
,CAT
,CST
,PST
)不是有效的tzdb区域,即使是Joda-Time的列表。这些可以是缩写或规则名,但它们不是区域标识符。