-2 java compiler-errors date java.util.date java-time
如何计算用户之前从jXDatePickerswing组件中选择的对象的当前日期和日期之间的差异以及已添加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);
Run Code Online (Sandbox Code Playgroud)
您正在将旧的日期时间代码与新的Java 8 Date-Time API混合在一起.该ChronoUnit.between(Temporal, Temporal)方法来自java.time.temporal包含两个Temporal对象的包.它不支持java.util.Date作为参数,因此编译错误.
Date您可以使用java.time.LocalDateclass,而不是使用遗留类,然后获取两个日期之间的差异.
LocalDate currentDate = LocalDate.now(ZoneId.systemDefault());
LocalDate objDate = obj.getSelectedDate(); // object should also store date as LocalDate
long daysDifference = ChronoUnit.DAYS.between(objDate, currentDate);
Run Code Online (Sandbox Code Playgroud)
根据您的注释,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);
Run Code Online (Sandbox Code Playgroud)
更新2
正如Ole VV在评论中所指出的,为了处理可能出现的时区问题,使用计算差异Instant是一种更好的方法.
Instant now = Instant.now();
long daysDifference = obj.getSelectedDate()
.toInstant()
.until(now, ChronoUnit.DAYS);
Run Code Online (Sandbox Code Playgroud)