Летнее время в Java кажется неправильным - PullRequest
0 голосов
/ 22 октября 2018

Со вчерашнего дня я столкнулся с некоторыми проблемами, связанными с часовым поясом с Java (21/10/2018).Похоже, что java рассматривает возможность перехода на летнее время в Бразилии, но это не так.

Я создал следующий тест, чтобы быть уверенным

public static void main(String[] args) {

    ZonedDateTime dateTime = LocalDateTime.now().atZone(ZoneId.systemDefault());
    System.out.println(dateTime);

    ZonedDateTime saoPaulo = dateTime.withZoneSameInstant(ZoneId.of("America/Sao_Paulo"));
    ZonedDateTime cuiba = dateTime.withZoneSameInstant(ZoneId.of("America/Cuiaba"));
    ZonedDateTime rightTime = dateTime.withZoneSameInstant(ZoneId.of("GMT-4"));
    System.out.println(saoPaulo);
    System.out.println(cuiba);
    System.out.println(rightTime);
}

, который дал следующий результат

    2018-10-22T09:55:34.473-02:00[America/Sao_Paulo]
    2018-10-22T09:55:34.473-02:00[America/Sao_Paulo]
    2018-10-22T08:55:34.473-03:00[America/Cuiaba]
    2018-10-22T07:55:34.473-04:00[GMT-04:00]

Это неправильно, поскольку текущий часовой пояс для Сан-Паулу должен быть -03, а для Америки / Куябы - -04

Кто-нибудь знает, каков источник информации о часовом поясе на Java?Есть что-то, что я могу сделать на моей стороне, чтобы это исправить?Я знаю, что могу это исправить, установив фиксированное смещение по Гринвичу, но мне это не нравится.

1 Ответ

0 голосов
/ 22 октября 2018

Ссылка, опубликованная Джоном Скитом, помогла мне решить мою проблему.Oracle обновила информацию о переходе на летнее время в последних выпусках.После обновления версии JDK она работает как положено.

    2018-10-22T09:19:31.761-03:00[America/Sao_Paulo]
    2018-10-22T09:19:31.761-03:00[America/Sao_Paulo]
    2018-10-22T08:19:31.761-04:00[America/Cuiaba]
    2018-10-22T08:19:31.761-04:00[GMT-04:00]
...