我找不到任何具体的文档来回答这个问题。正在运行的JVM是否检测到计算机时区的更改?
我写了一些简单的测试代码,以找出究竟发生在的Java 1.8在OS X 10.12:
public static void main(String[] _args) throws InterruptedException {
while (true) {
int calendarTimezoneOffset = Calendar.getInstance().get(Calendar.ZONE_OFFSET);
System.out.println("calendarTimezoneOffset = " + calendarTimezoneOffset);
ZoneOffset offset = ZonedDateTime.now().getOffset();
System.out.println("offset = " + offset);
Thread.sleep(1000);
}
}
无论是旧的方式(日历)和新方法(Java 8的日期和时间库)在JVM运行时,不会检测到我对操作系统时区做出的任何更改。我需要停止并开始代码以获取更改的时区。
这是设计吗?这是跨JVM实现和操作系统的可靠行为吗?
哇,另一路时区如何刺伤我们在后面......我认为这是电脑不运行期间时区之间移动的假设的一个程序。虽然这不符合法案......我认为当前的JVM不会改变操作系统的时区。 (不是JVM,但可能值得检查Android是如何做到的......) – ppeterka
我认为这可以归类为JVM错误。 – Mac70
JVM不知道有关时区的事情(规范从未提及它们,虚拟机也不需要这些信息),与时区有关的所有事情都是平台API的一部分,也就是说,它在像java这样的类中实现。 util.Timezone','java.util.Calendar'或'java.time'-packages'。但是在改变时区时,我没有发现定义这些类的行为,所以在VM运行期间不改变默认时区似乎是目前Java实现的行为,但它绝不是保证。 –