亚利桑那时区夏令时

时间:2010-10-31 23:07:45

标签: java timezone dst

我正在尝试获取特定时区的当前时间。我尝试了以下代码。

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 是的 - 为什么夏令时适用于亚利桑那州? 如何获得凤凰城或美国任何其他城市的正确挂钟时间?

4 个答案:

答案 0 :(得分:8)

亚利桑那州是in the Mountain timezone, but doesn't observe DST。如果指定时区“US / Mountain”,则计算机将应用Mountain时区中大多数州使用的规则,其中包括观察夏令时。要获得亚利桑那州(不包括DST)的规则,您需要时区“US / Arizona”(或“America / Phoenix”)。在纳瓦霍国家,您需要名为“Navajo”的时区。

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

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

作为一个例子,尽管Indiana now observes Eastern time and observes DST(除芝加哥附近的几个县,如芝加哥的中央时间),2006年之前他们没有观察到夏令时。创建一个名为“美国/印第安纳”(或“美洲/印第安纳波利斯”)的时区来覆盖这个地区,即使在今天,你仍然想在谈论印第安纳时使用时区“America / Indianapolis”,以便查询日期可以正确回答2006年之前的时间。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

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

正如其他海报所述,“美国/亚利桑那州”区域信息与“美国/山区”截然不同。

答案 3 :(得分:0)

我正在提供现代答案。不要使用类CalendarGregorianCalendarTimeZoneDate。它们的设计都不好,幸运的是,它们早已过时。

java.time

这很简单,只要您知道如何做:

    ZonedDateTime arizonaExceptNavajo = ZonedDateTime.now(ZoneId.of("America/Phoenix"));
    System.out.println(arizonaExceptNavajo);

我刚才运行此代码时,输​​出为:

  

2019-10-23T04:07:23.034-07:00 [美国/凤凰城]

不建议使用美国/山区时区ID。它是指向America / Denver的链接,而America / Denver确实使用夏令时(夏令时,DST)。现代时区ID的格式为 region / city ,其中 region 是像美国这样的大陆,或者是像太平洋这样的海洋。

正如其他人所说,夏季时间是亚利桑那州纳瓦霍族的一个地方。所提及的Navajo时区ID也已被弃用。使用美国/丹佛:

    ZonedDateTime navajoNation = ZonedDateTime.now(ZoneId.of("America/Denver"));
    System.out.println(navajoNation);
  

2019-10-23T05:07:23.037-06:00 [美国/丹佛]

由于夏季时间仍然有效,所以一天中的时间比上述凤凰城的时间早一小时。

链接