Как сравнить лишнюю секунду с java .time и Junit? - PullRequest
1 голос
/ 15 января 2020

Итак, у меня есть парсер LocalDateTime, который принимает дату в виде строки. Я написал несколько тестов для этого, например, проверка високосного года и еще несколько.

Теперь я хочу, чтобы тест JUnit проверял на високосную секунду. Я провел некоторое исследование и обнаружил, что, вероятно, это невозможно с java .time (?). До сих пор я нашел подходящую дату, когда произошла високосная секунда.

Вот что я пробовал до сих пор:

@Test
@DisplayName("Check for leap second")
void shouldLeapSecondOccurReturnExactlyTwoMinuteSpan() {
    String leapSecond = "2015-06-30T23:59:00+0000";
    String leapSecond2 = "2015-07-01T00:01:00";
    Assertions.assertTrue(DateConvertUtils.parseIso8601ToUTC(leapSecond)
   .isEqual(LocalDateTime.parse(leapSecond2).minusSeconds(120)));
}

Хотя DateConvertUtils содержит мой вышеупомянутый парсер и custom DateTimeFormatter.

Я ценю любую помощь в правильном направлении.

1 Ответ

1 голос
/ 20 апреля 2020

Ну, большинство библиотек, включая пакет java.time, игнорируют дополнительные секунды. Моя библиотека Time4J , однако, поддерживает это. Пример использования ввода:

    String s1 = "2015-06-30T23:59:00+0000";
    String s2 = "2015-07-01T00:01:00"; // no offset information

    ChronoFormatter<Moment> f =
        ChronoFormatter
            .ofMomentPattern(
                "uuuu-MM-dd'T'HH:mm:ss[X]", // optional offset
                PatternType.CLDR, 
                Locale.ROOT, 
                ZonalOffset.UTC); // default offset

    Moment m1 = f.parse(s1);
    Moment m2 = f.parse(s2); // no offset => UTC

    long delta = SI.SECONDS.between(m1, m2);
    System.out.println(delta); // 121

Объекты типа Момент могут быть легко преобразованы в / из java.time.Instant, если вы хотите потерять информацию о возможном високосном секунде (если у вас есть 2015-06-30T23:60Z).

Полезно знать: Вам действительно нужен класс, подключенный к временной шкале UT C. Такие классы, как LocalDateTime, не имеют понятия часовых поясов, поэтому они не имеют связи с UT C и не могут использоваться для определения високосных секунд по определению.

Более подробную информацию можно найти в моей статье DZone. .

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