所以我有一个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包含了我上面提到的解析器和一个自定义的DateTimeFormatter。
我很感谢对正确方向的任何帮助。
发布于 2020-04-20 11:00:23
那么,包括java.time-package在内的大多数库都忽略了闰秒。然而,我的库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 ),则可以很容易地将Moment类型的对象转换为java.time.Instant,或将其转换为2015-06-30T23:60Z。
很高兴知道:你真的需要至少一个连接到时间线的类。像LocalDateTime这样的类没有时区的概念,所以它们与协调世界时没有连接,并且根据定义不能用于确定闰秒。
更多背景信息可以在my DZone paper中找到。
https://stackoverflow.com/questions/59755850
复制相似问题