使用TimeZoneNames查询Europe/Jersey等时区en-US下为何总返回GMT?
时区查询异常:泽西岛、马恩岛时区始终返回GMT缩写
我需要获取不同时段各国的具体时区缩写,目前使用TimeZoneNames库实现相关需求,但遇到了异常问题:当查询泽西岛(Europe/Jersey)和马恩岛(Europe/Isle_of_Man)的时区缩写时,无论当前处于什么时段,使用语言代码"en-US"查询返回的结果始终是"GMT",代码实现如下:
GetTimeZoneAbbreviation(ZonedDateTime localTimeZone) { string lang = CultureInfo.GetCultureInfo("en-US").Name; string tzid = localTimeZone.Zone.Id; var isDST = localTimeZone.IsDaylightSavingTime(); TimeZoneValues localTimeZoneName = TZNames.GetAbbreviationsForTimeZone(tzid, lang); return isDST ? localTimeZoneName.Daylight : localTimeZoneName.Standard; }
调试时我发现返回的localTimeZoneName所有字段值都是"GMT",正常情况下夏令时对应的字段应该返回"BST"才对。我测试了多个其他国家的时区,只有这两个时区没有区分夏令时/冬令时的缩写。
已排查信息
- 查看该库的data.json数据源,Europe/Jersey和Europe/Isle_of_Man的引用数量远少于其他时区,其中一个值直接关联GMT,而其他时区一般会指向"Europe_Central"这类元时区标识,或者有更多关联指向。
- 另外,core/common/supplemental下的metaZones.xml文件里,泽西岛和马恩岛的时区仅关联了GMT元时区,而都柏林等其他时区有如下配置:
<timezone type="Europe/Dublin"> <usesMetazone mzone="Irish" to="1971-10-31 02:00"/> <usesMetazone mzone="GMT" from="1971-10-31 02:00"/> </timezone> ... <mapZone other="GMT" territory="IE" type="Europe/Dublin"/> ... <mapZone other="Irish" territory="001" type="Europe/Dublin"/>
而泽西岛和马恩岛仅配置了基础的timezone节点。
内容的提问来源于stack exchange,提问作者Jonas Rasmussen
相关产品推荐
相关产品推荐

