如何计算用户之前从jXDatePicker
swing组件中选择的对象的当前日期和日期之间的差异,以及已作为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);
答案 0 :(得分:6)
您正在将旧版日期时间代码与新的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);
答案 1 :(得分:3)
我同意Pallavi Sonal’s answer,当您可以使用现代java.time
课程时,您应该将使用Date
之类的老式课程保持在最低限度。我不知道JXDatePicker,但我看到its getDate
method返回Date
。所以你要做的第一件事就是把它转换成更现代的东西。
从您的问题看来,在这种情况下,您只关心日子,而不是时间。如果这是正确的,Pallavi Sonal也是正确的,LocalDate
是适合您的正确课程。我认为这种转换应该对你有用
LocalDate selectedDate = jXDatePicker.getDate()
.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
这是对时区问题的一些保留,因为我不知道日期选择器在哪个时区给你日期。一旦你知道,你可以填写正确的时区而不是ZoneId.systemDefault()
。
不幸的是,我不知道日期选择器组件可以直接为您提供LocalDate
。可能有一个,我希望有,所以它可能值得搜索一个。