在Java中计算两个LocalDates之间的秒数

时间:2016-12-01 14:26:52

标签: java time localdate

我正在尝试计算两个LocalDates之间的秒数。 现在这实际上给了我一个艰难的时间,因为这段代码片段 不能很好地工作:

long seconds = lastRefreshPoint.until(systemTime, ChronoUnit.SECONDS);

这给了我一个例外:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Minutes

我无法在互联网上找到任何其他方法。 如果你可以帮助我会很好!

提前致谢

3 个答案:

答案 0 :(得分:2)

好的,这里我的评论作为答案以及有关观察到的行为原因的一些细节。

<强>总结

这没有任何意义,因为日历日期对小时,分钟或秒钟一无所知。支持的最低单位必须是当天。另请参阅Java-8-class LocalDate的{​​{3}}:

  

如果单位是ChronoUnit,则在此处执行查询。该   支持的单位是:•DAYS•WEEKS•MONTHS•YEARS•DECADES   •CENTURIES•MILLENNIA•ERAS所有其他ChronoUnit实例都将   返回false。

<强>理由:

虽然有人可以想象在两个连接日之间以秒为单位实现86400秒的差异(忽略区域效果或闰秒),但这不是一个好主意。如果API设计者决定支持算术之间,那么他们也应该决定支持在日期中添加秒。但问题出现了:

日期+ 86400秒=下一个日期

但是什么是日期+ 123秒???

对班级LocalDate中比一天更精确的单位的支持会导致无法治愈的不一致。

答案 1 :(得分:2)

Hochschild的答案是正确的,应该被接受。

LocalDate::atStartOfDay

要从仅限日期的值创建日期时间值,请选择当天的第一时刻。这样做需要一个时区。对于任何给定的时刻,日期可以在全球范围内按区域变化。

不要假设这一天从00:00:00开始。由于夏令时等异常,日期可能会在01:00:00等时间开始。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = myLocalDate.atStartOfDay( z );

然后继续计算经过的时间。

Duration d = Duration.of( zdtStart , zdtStop );
long seconds = d.getSeconds(); 

答案 2 :(得分:1)

我自己发布这个帖子,因为这是作为评论而不是作为答案发布的:

  

这没有任何意义,因为日历日期不知道   任何关于小时,分钟或秒的事情。支持的最低单位   必须是一天。

     

- Meno Hochschild

这非常重要。

非常感谢Meno Hochschild