亚利桑那州TimeZone日节省光

我想在特定时区获得当前时间。 我尝试了以下代码。

Calendar j = new GregorianCalendar(TimeZone.getTimeZone("US/Mountain")); j.setTimeInMillis(Calendar.getInstance().getTimeInMillis()); System.out.println(j.get(Calendar.HOUR_OF_DAY)+":"+j.get(Calendar.MINUTE)); TimeZone tz = TimeZone.getTimeZone("US/Mountain"); System.out.println("tz.getRawOffset()"+tz.getRawOffset()/3600); System.out.println(tz.getDSTSavings()); System.out.println (tz.inDaylightTime(new Date())); 

我得到的答案令人惊讶 – 16:57 – 错误1小时tz.getRawOffset() – 7000 3600000真实 – 为什么亚利桑那州的夏令时是真的? 如何获得凤凰城或美国任何其他城市的正确挂钟时间?

亚利桑那州位于山区时区,但没有观察到夏令时 。 如果指定时区“US / Mountain”,则计算机将应用Mountain时区中大多数州使用的规则,其中包括观察夏令时。 要获得亚利桑那州(不包括DST)的规则,您需要时区“US / Arizona”(或“America / Phoenix”)。 在纳瓦霍国家,您需要名为“Navajo”的时区。

为了省去一些麻烦,请始终尝试使用“America / *”中的名称,您可以在其中选择与您感兴趣的地方具有相同时区规则的城市名称。

要在世界上任何给定城市的正确时区内获得正确的时间,您只需熟悉Olson时区数据库中的名称及其含义即可。 虽然您通常认为术语“时区”是指冬季中的时间(当每个人都观察标准时间时),但在Olson数据库中,时区名称表示夏令时规则和时区规则的完整历史记录对于特定地区。

例如,即使印第安纳州现在观察东部时间并观察夏令时 (芝加哥附近的几个县除了像芝加哥那样在中部时间),2006年之前他们没有观察夏令时。 创建一个名为“美国/印第安纳”(或“美洲/印第安纳波利斯”)的时区来覆盖这个地区,即使在今天,你仍然想在谈论印第安纳时使用时区“America / Indianapolis”,以便查询日期2006年之前的时间可以正确回答。

亚利桑那州大部分地区都没有观察夏令时,但亚利桑那州内的纳瓦霍国家确实观察到夏令时。

区域信息可以直接在全球许多主要城市获得。 这包括Phoenix,其区域标识符为“America / Phoenix”。

您可以使用TimeZone.getAvailableIDs()方法或手动检查JRE lib / zi目录的内容来查找可用区域标识符列表。

正如其他海报所指出的那样,“美国/亚利桑那州”区域信息与“美国/山区”不同。