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数据库,而某些缩写(如)来自ASTJava传统。这种区别很重要,因为只有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它也有几种形式是历史的假象,并应不使用任何更多:
基于位置,形式为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
Run Code Online (Sandbox Code Playgroud)
当然,这些映射可能会也可能不会被接受-但是据报道,它们是Java的TZUpdater工具用来对这些传统Java时区缩写进行继承的映射。
| 归档时间: |
|
| 查看次数: |
2729 次 |
| 最近记录: |