Я не могу найти какие-либо конкретные документы, чтобы ответить на этот вопрос.
Я написал несколько простых тестовых кодов для разработки того, что на самом деле происходит на 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 Date and Time library) не обнаруживают никаких изменений, которые я вношу в часовой пояс ОС во время работы JVM. Мне нужно остановить и запустить код, чтобы получить измененный часовой пояс.
Это по дизайну? Является ли это надежным поведением в реализациях JVM и операционных системах?