Javadoc中TimeZone
有一个弃用警告:
为了与JDK 1.1.x兼容,还支持其他一些三字母时区ID(例如"PST","CTT","AST").但是,它们的使用已被弃用......
它在这里说"其他",但我看不清它在哪里定义哪些三字母ID不被弃用.这些记录在哪里?
GMT
在文档中提到了后备,因此可以安全地假设这是一个非弃用的ID; 但:
被UTC
弃用了吗?你打算用Etc/UTC
吗?或者你应该使用GMT
?(TimeZone.getTimeZone("UTC").hasSameRules(TimeZone.getTimeZone("GMT")
是真的)
是CET
(欧洲中部时间)已过时?如果没有,您应该使用什么时区标识符?根据这个演示,只有一个其他标识符产生相同的规则,即MET
(中欧时间).
还有另一个时区ID,ECT
它具有与CET
(中欧时间)相同的显示名称,但它没有相同的规则(我认为它们在20世纪70年代中期的某处有所不同),它具有相同的规则Europe/Paris
.但是,由于他们有不同的规则,两者不可互换.
因此,我的结论是,支持的三个字母ID的最小集合是GMT
和CET
; 但似乎很奇怪,没有记录.有任何想法吗?
我注意到@shmosel建议的可能重复:"GMT"是Java TimeZone中的缩写,是否可以使用它?.这部分涵盖了我的问题; 但我问的是更普遍的问题"支持什么(我们怎么知道)",而不仅仅是"支持X".
首先,回答您的特定问题:
所有基于缩写的标识符都应视为已弃用。它们不足以标识保留所有详细信息的特定时区。例如,您可以在此处查看所有使用中欧时间的地点。其中一些会CET
全年使用,有些会CET
在冬季使用,但CEST
在夏季使用。其中,并非所有人都使用相同的DST过渡天,或在整个历史中使用相同的时区偏移量。只是没有足够的信息CET
来确定要使用的规则集。
使用GMT
或相对安全UTC
,因为它们是明确的。但是,使用Etc/GMT
或会更正确Etc/UTC
。如果您只选择一个,恕我直言,应该是Etc/UTC
。
CET
正如我提到的,应该将其与其他缩写一起视为不推荐使用。但是,值得注意的是,某些缩写(如CET
)来自TZ数据库,而某些缩写(如)来自AST
Java传统。这种区别很重要,因为只有TZDB才对可能在其他地方传输并由非基于Java的系统解释的数据有用。
特别值得注意的是,认识到美国的缩写PST
和CST
是不是在TZDB,即使MST
和EST
有。
而不是CET
,您应该选择与您的方案相关的基于地区的时区。如果您在谈论法国,请使用Europe/Paris
。如果您在谈论波兰,请使用Europe/Warsaw
,等等。
接下来,了解基础的TZ数据库具有几种可以使用的标识符类型:
基于位置,形式为 Area/Locality
例如: America/New_York
,Europe/London
,Pacific/Honolulu
基于位置,形式为 Area/Region/Locality
例如:America/Argentina/Buenos_Aires
,America/Indiana/Knox
在Etc
名称空间中的管理区域:
例如: Etc/UTC
,Etc/GMT+2
, Etc/GMT-5
+/-基于POSIX标准,与通常预期的ISO标准相反
常用于海上船舶
它也有几种形式是历史的假象,并应不使用任何更多:
基于位置,形式为Country
或Country/StateOrRegion
例如:US/Pacific
,US/Hawaii
,Brazil/East
,Canada/Newfoundland
,Egypt
,Cuba
美国大陆上的POSIX标识符:
例如:EST5EDT
,CST6CDT
,MST7MDT
,PST8PDT
缩写- 无论如何还是其中一些
例如: EST
,EET
,PRC
,WET
此外,Java先前已将这些标识符扩展为包括不属于TZ数据库的其他缩写。我可以在此处找到它们,作为指向其对应的TZ数据库现代标识符的链接:
Link Australia/Darwin ACT Link Australia/Sydney AET Link America/Argentina/Buenos_Aires AGT Link Africa/Cairo ART Link America/Anchorage AST Link America/Sao_Paulo BET Link Asia/Dhaka BST Link Africa/Harare CAT Link America/St_Johns CNT Link America/Chicago CST Link Asia/Shanghai CTT Link Africa/Addis_Ababa EAT Link Europe/Paris ECT Link America/New_York EST Link Pacific/Honolulu HST Link America/Indianapolis IET Link Asia/Calcutta IST Link Asia/Tokyo JST Link Pacific/Apia MIT Link America/Denver MST Link Asia/Yerevan NET Link Pacific/Auckland NST Link Asia/Karachi PLT Link America/Phoenix PNT Link America/Puerto_Rico PRT Link America/Los_Angeles PST Link Pacific/Guadalcanal SST Link Asia/Saigon VST
当然,这些映射可能会也可能不会被接受-但是据报道,它们是Java的TZUpdater工具用来对这些传统Java时区缩写进行继承的映射。