当前位置:  开发笔记 > 编程语言 > 正文

不推荐使用哪个三个字母的时区ID?

如何解决《不推荐使用哪个三个字母的时区ID?》经验,为你挑选了1个好方法。

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的最小集合是GMTCET; 但似乎很奇怪,没有记录.有任何想法吗?


我注意到@shmosel建议的可能重复:"GMT"是Java TimeZone中的缩写,是否可以使用它?.这部分涵盖了我的问题; 但我问的是更普遍的问题"支持什么(我们怎么知道)",而不仅仅是"支持X".



1> Matt Johnson..:

首先,回答您的特定问题:

    所有基于缩写的标识符都应视为已弃用。它们不足以标识保留所有详细信息的特定时区。例如,您可以在此处查看所有使用中欧时间的地点。其中一些会CET全年使用,有些会CET在冬季使用,但CEST在夏季使用。其中,并非所有人都使用相同的DST过渡天,或在整个历史中使用相同的时区偏移量。只是没有足够的信息CET来确定要使用的规则集。

    使用GMT或相对安全UTC,因为它们是明确的。但是,使用Etc/GMT或会更正确Etc/UTC。如果您只选择一个,恕我直言,应该是Etc/UTC

    CET正如我提到的,应该将其与其他缩写一起视为不推荐使用。但是,值得注意的是,某些缩写(如CET)来自TZ数据库,而某些缩写(如)来自ASTJava传统。这种区别很重要,因为只有TZDB才对可能在其他地方传输并由非基于Java的系统解释的数据有用。

    特别值得注意的是,认识到美国的缩写PSTCST不是在TZDB,即使MSTEST

    而不是CET,您应该选择与您的方案相关的基于地区的时区。如果您在谈论法国,请使用Europe/Paris。如果您在谈论波兰,请使用Europe/Warsaw,等等。

接下来,了解基础的TZ数据库具有几种可以使用的标识符类型:

基于位置,形式为 Area/Locality

例如: America/New_YorkEurope/LondonPacific/Honolulu

基于位置,形式为 Area/Region/Locality

例如:America/Argentina/Buenos_AiresAmerica/Indiana/Knox

Etc名称空间中的管理区域:

例如: Etc/UTCEtc/GMT+2Etc/GMT-5

+/-基于POSIX标准,与通常预期的ISO标准相反

常用于海上船舶

它也有几种形式是历史的假象,并应使用任何更多:

基于位置,形式为CountryCountry/StateOrRegion

例如:US/PacificUS/HawaiiBrazil/EastCanada/NewfoundlandEgyptCuba

美国大陆上的POSIX标识符:

例如:EST5EDTCST6CDTMST7MDTPST8PDT

缩写- 无论如何还是其中一些

例如: ESTEETPRCWET

此外,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时区缩写进行继承的映射。

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有