Как установить ZoneOffset для часового пояса Берлина - PullRequest
0 голосов
/ 03 апреля 2019

Я получаю LocalDateTime на два часа меньше, чем в реальном времени.Как я могу получить смещение времени для Германии, Берлинское время для моего кода ниже, спасибо.

LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss", Locale.ENGLISH);

Спасибо

1 Ответ

0 голосов
/ 10 апреля 2019

Используйте ZoneId и ZonedDateTime.

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss", Locale.ENGLISH);
    ZoneId zone = ZoneId.of("Europe/Berlin");

    long seconds = 1_556_000_000;

    ZonedDateTime dateTime = Instant.ofEpochSecond(seconds).atZone(zone);
    String formattedDateTime = dateTime.format(formatter);
    System.out.println(formattedDateTime);

Вывод этого фрагмента:

23.04.2019 08: 13: 20

В моем примере значение секунд соответствует 06:13:20 UTC, поэтому вы получили двухчасовое смещение относительно UTC.

Встроено летнее время (DST), поэтому зимой вы получите только 1 час от UTC, как и положено. Исторические изменения в смещении тоже работают «из коробки», и известны будущие изменения (что происходит в Германии после 2021 года, никто не знает).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...