Duration.ofDays 生成 UnsupportedTemporalTypeException

2022-09-01 21:35:11

我正在尝试学习新的日期和时间 API。我的代码正在工作,除了最后一行:

LocalDate current=LocalDate.now();
System.out.println(current);

LocalDate personaldate=LocalDate.of(2011,Month.AUGUST, 15);
System.out.println(personaldate);

LocalDate afterten=current.plus(Period.ofDays(10));
System.out.println(afterten);

// error occurs here        
System.out.println(afterten.plus(Duration.ofDays(3)));

当我尝试添加以天为单位的持续时间时,它会生成一个错误。任何人都可以帮我理解为什么吗?

错误:

Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Seconds                                                                                             
        at java.time.LocalDate.plus(LocalDate.java:1241)                                                                                                                                              
        at java.time.LocalDate.plus(LocalDate.java:137)                                                                                                                                               
        at java.time.Duration.addTo(Duration.java:1070)                                                                                                                                               
        at java.time.LocalDate.plus(LocalDate.java:1143)                                                                                                                                              
        at TestClass.main(TestClass.java:15)    

答案 1

虽然接受的答案是完全正确的,但当我遇到这个问题时,我正在寻找一个简单的解决方案来解决我的问题。

我发现使用句点不允许我计算两个 LocalDate 对象之间的天数。(告诉我两者之间有多少年,几个月和几天,是的,但不仅仅是天数。

但是,要获得我想要的结果,就像将LocalDate方法“atStartOfDay”添加到我的每个对象中一样简单。

所以我的错误代码:

long daysUntilExpiry = Duration.between(LocalDate.now(), training.getExpiryDate()).toDays();

简单地调整为:

long daysUntilExpiry = Duration.between(LocalDate.now().atStartOfDay(), training.getExpiryDate().atStartOfDay()).toDays();

这样做会使对象成为可以与持续时间一起使用的 LocalDateTime 对象。因为两个对象都有一天的开始作为“时间”部分,所以没有区别。

希望这有助于其他人。


答案 2

持续时间使用基于时间的值(秒、纳秒)测量时间量。期间使用基于日期的值(年、月、日)。这是链接

https://docs.oracle.com/javase/tutorial/datetime/iso/period.html

与JodaTime相同


推荐