Datetime 时区文件+;缩写->;长名称(优于CLDR)

Datetime 时区文件+;缩写->;长名称(优于CLDR),datetime,timezone,Datetime,Timezone,(这个问题类似于 但不同) /usr/share/zoneinfo中的每个时区文件都有0个或多个时区 缩写。例如,America/Chicago有五个缩写: CDT,CPT,CST,CWT和EST。作为参考,我通过这样做发现: cd /usr/share/zoneinfo zdump -v America/Chicago | perl -anle 'print $F[13]' | sort | uniq 在某种意义上,文件和缩写的每一个组合都代表一个 不同的时区。以美国/芝加哥为例,并非所

(这个问题类似于 但不同)

/usr/share/zoneinfo
中的每个时区文件都有0个或多个时区 缩写。例如,
America/Chicago
有五个缩写:
CDT
CPT
CST
CWT
EST
。作为参考,我通过这样做发现:

cd /usr/share/zoneinfo 
zdump -v America/Chicago | perl -anle 'print $F[13]' | sort | uniq 
在某种意义上,文件和缩写的每一个组合都代表一个 不同的时区。以美国/芝加哥为例,并非所有这些 时区仍在使用

我的问题:在哪里可以找到文件名/缩写的列表 映射到长格式时区名称的组合

我正在寻找的“美国/芝加哥”部分可能是这样的:

Filename Abbreviation Full Name 

America/Chicago CDT Central Daylight Time 
America/Chicago CPT [no longer used] 
America/Chicago CST Central Standrad Time 
America/Chicago CWT [no longer used] 
America/Chicago EST Eastern Standard Time 
(我同意没有命名未使用的时区)

我熟悉CLDR(),但是
common/supplemental/windowsZones.xml
中的文件似乎是 非常不准确(也有点不完整,但事实并非如此) 作为一件大事)。例如,此行(唯一与
CST6CDT
匹配的行):


声明
CST6CDT
时区的名称为“中央标准” “时间”,这是不正确的

CST6CDT
一般称为“中央时间”,是GMT-5(“中央时间”) 夏令时和GMT-6(“中央 标准时间“),夏令时以外的时间

全年称之为“中央标准时间”是不正确的。叫它 全年的“中央时间”是可以接受的,但最好是 区分标准时间和白天时间

我考虑找一个“长名字缩写”的翻译, 但这不起作用,因为/usr/share/zoneinfo会重复 缩写。例如,“东部标准时间”在美国是指“东部标准时间” 文件“EST5EDT”,但文件中为“澳大利亚东部标准时间” “澳大利亚/墨尔本”

我考虑过使用
common/supplemental/windowsZones.xml
,然后 如果将isdst标志设置为 我正在考虑具体的时间,但这似乎很困难


谢谢你的帮助

CLDR不仅仅是windows映射文件,而且windows ID也不是显示名称。今天晚些时候,我将在回答中详细阐述。在我开始回答较长的问题之前,先问一个问题-您使用的是什么编程语言?如果是Java或C,那么答案就是简单地使用它,它已经正确地使用了CLDR,并为您提供了简单的函数来获取短名称和长名称的通用、标准和日光形式。如果您计划直接使用CLDR,那么您真的应该彻底阅读本手册的第5、6和7节。@MattJohnson,我想我在相关问题中回答了我自己的问题。可能应该在这里指出。好的,然后继续并关闭这个。尽管我仍然建议您阅读规范,因为它可能比仅仅从单个xml文件中读取更复杂。您还必须考虑元区域、重写、基于位置的格式设置缺省值、语言内的区域层次结构等。如我所说,如果可以的话,使用库。
<mapZone other="Central Standard Time" territory="ZZ" type="CST6CDT"/>