我正在尝试计算两个LocalDates之间的秒数。 现在这实际上给了我一个艰难的时间,因为这段代码片段 不能很好地工作:
long seconds = lastRefreshPoint.until(systemTime, ChronoUnit.SECONDS);
这给了我一个例外:
java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Minutes
我无法在互联网上找到任何其他方法。 如果你可以帮助我会很好!
提前致谢
答案 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