遇到这个bug还挺突然的。
@Test
public void timeGap() {
TemporalAccessor end = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").parse("2021-09-30 10:35:00");
TemporalAccessor start = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").parse("2021-06-24 09:35:00");
Integer durationTime = (int) Duration.between(LocalDateTime.from(start), LocalDateTime.from(end)).toMillis() / 1000;
System.out.println("durationTime = " + durationTime);
}
乍一眼看好像没有什么问题,逻辑也比较简单,就是求两个时间的跨度(秒)。
问题是当start和end两个日期跨度够大的时候,运行的结果就有点不尽如人意。
结果是负数,分析下来就是运算的时候先运行
Duration.between(LocalDateTime.from(start), LocalDateTime.from(end)).toMillis()
得出结果 8470800000,转为int后结果已经超出int的最大值,所以最后的结果就是负数。
解决:
先运算得出结果再转int
Integer durationTime = (int) (Duration.between(LocalDateTime.from(start), LocalDateTime.from(end)).toMillis() / 1000);