如何计算用户先前从jXDatePicker
swing组件中选择并已作为Date
添加到该对象的对象的当前日期和日期之间的差异。
在最后一行的当前代码中,我收到以下错误消息:
no suitable method found for between(Date, Date)
Date currentDate = new Date();
Date objDate = obj.getSelectedDate(); //getting date the user had
//previously selected and that been
//added to object
long daysDifference = ChronoUnit.DAYS.between(objDate, currentDate);
最佳答案
您正在将旧的Date-Time代码与新的Java 8 Date-Time API混合在一起。 ChronoUnit.between(Temporal, Temporal)
方法来自java.time.temporal
包,该包带有两个Temporal对象。它不支持将java.util.Date
作为参数,因此会导致编译错误。
可以使用Date
类,而不是使用传统的java.time.LocalDate
类,然后获取两个日期之间的差值。
LocalDate currentDate = LocalDate.now(ZoneId.systemDefault());
LocalDate objDate = obj.getSelectedDate(); // object should also store date as LocalDate
long daysDifference = ChronoUnit.DAYS.between(objDate, currentDate);
更新资料
根据您的注释,objDate只能是一个Date,因此在这种情况下,您可以使用Legacy Date -Time和Java 8 Date-Time类之间的互操作性。
LocalDateTime currentDate = LocalDateTime.now(ZoneId.systemDefault());
Instant objIns = obj.getSelectedDate().toInstant();
LocalDateTime objDtTm = LocalDateTime.ofInstant(objIns, ZoneId.systemDefault());
long daysDifference = ChronoUnit.DAYS.between(objDtTm, currentDate);
更新2
正如Ole V.V在评论中指出的那样,要处理可能发生的时区问题,使用
Instant
计算差异是一种更好的方法。Instant now = Instant.now();
long daysDifference = obj.getSelectedDate()
.toInstant()
.until(now, ChronoUnit.DAYS);
关于java - 尝试计算两个日期之间的天数差异时的“no suitable method found for between(Date, Date)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44473169/