TL; DR: Ваши результаты по Linux верны и, как и ожидалось.
В 1970 году Катар был по смещению +04: 00 по Гринвичу. Эпоха наступила 1 января 1970 года. В 1972 году Катар перешел со смещения +04: 00 на +03: 00. Источник: Вкл. Часовой пояс в Дохе, Катар (Ad Dawhah) , в Изменения часового пояса для: выберите 1970–1979.
Что пошло не так на вашемКомпьютер Windows, тогда? С моей стороны это предположение: как я читаю часовые пояса по умолчанию в документации Windows, Windows не предлагает часовой пояс Азии / Катара в качестве параметра в Windows. Поэтому я предполагаю, что для вашей Windows установлено Стандартное арабское время в соответствии с таблицей, с которой я только что связался, что, в свою очередь, означает UTC + 03: 00. Стандартное арабское время (или Стандартное время Аравии; сокращенно AST) используется, например, в Кувейте, Ираке и Йемене. Но эти страны были на смещении +03: 00 все время с 1970 года и раньше. Поэтому, когда Java пытается выбрать часовой пояс по умолчанию из Windows, она может легко получить часовой пояс с этой историей, а не с правильной историей для Катара. Как я уже сказал, пока это предположение. Но вы можете легко проверить. На компьютере с Windows попробуйте:
System.out.println(ZoneId.systemDefault());
Если он напечатает Asia/Qatar
, мое предположение было неверным. Если он печатает что-то вроде GMT+03:00
, я был прав. Если он печатает что-то еще, я могу или не могу.
Редактировать: Несколько дальнейших ссылок: AST - Стандартное время Аравии (Стандартное время) приводит Кувейт в качестве примера города. Изменения во времени в Кувейте за последние годы сообщает нам, что Кувейт также находится в смещении +03: 00 с 1950 года.
Дальнейшее редактирование: Спасибо за подтверждение того, что Java на вашем компьютере Windows печатает Азию/ Эр-Рияд в качестве часового пояса по умолчанию. Эр-Рияд, Саудовская Аравия, находится на смещении +03: 00 с 1947 года. Это, по крайней мере, частично объясняет, почему вы получаете это смещение, даже если оно не подходит для Катара. Источник