首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将leapsecond与java.time和Junit进行比较?

如何将leapsecond与java.time和Junit进行比较?
EN

Stack Overflow用户
提问于 2020-01-16 00:36:51
回答 1查看 51关注 0票数 1

所以我有一个LocalDateTime解析器,它接受字符串形式的日期。我已经为它写了几个测试,比如检查闰年等等。

现在,我想要一个JUnit测试来检查是否有闰秒。我做了一些研究,发现使用java.time(?)可能是不可能的。到目前为止,我找到了一个出现闰秒的合适日期。

这是我到目前为止尝试过的:

代码语言:javascript
复制
@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包含了我上面提到的解析器和一个自定义的DateTimeFormatter

我很感谢对正确方向的任何帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-04-20 11:00:23

那么,包括java.time-package在内的大多数库都忽略了闰秒。然而,我的库Time4J支持它。使用输入的示例:

代码语言:javascript
复制
    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 ),则可以很容易地将Moment类型的对象转换为java.time.Instant,或将其转换为2015-06-30T23:60Z

很高兴知道:你真的需要至少一个连接到时间线的类。像LocalDateTime这样的类没有时区的概念,所以它们与协调世界时没有连接,并且根据定义不能用于确定闰秒。

更多背景信息可以在my DZone paper中找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59755850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档