使用 JDateChooser 比较日期

Compare Dates Using JDateChooser

我有两盒JDateChooser,想做一下比较:

JOptionPane.showMessageDialog (null,
    " Homologation Date Must Be Less or Equal to 11 Days Regarding Date of Shutdown ");

我制作了一个比较代码,但即使用户将日期放在他显示消息的条件之下。

以下代码:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
dt1 = sdf.format(dcdataDeslig.getDate().getTime());
SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");
dt2 = sdf1.format(dchomolog.getDate().getTime());

if (dt2.compareTo(dt1) >= 11 ) {
    JOptionPane.showMessageDialog (null," Homologation Date Must Be Less or Equal to 11 Days Regarding       Date of Shutdown ");
    dchomolog.setDate(null);
    txtdataDisp.setText("");
    txtdataPg.setText("");
}
txtdataDisp.setText(dt2);
txtdataPg.setText(dt2);

当您调用 sdf.format 时,结果是 String。这不是日期,它是代表日期的 文本

并且比较字符串不会告诉您两个日期之间的差异 - 字符串比较会告诉您它们是否按字母顺序排列,因为字符串表示字符序列 - 文本 - 仅此而已。

据我所知,dchomolog.getDate() return 是一个 java.util.Date,因此 getTime() 方法将 return 数字时间戳值,即number of milliseconds since Unix epoch.

要计算日期之间的差异,您可以减去 getTime() 的值,得到以毫秒为单位的差异。然后使用 java.util.concurrent.TimeUnit 将其转换为天数:

// get the difference in milliseconds
long diffMillis = dchomolog.getDate().getTime() - dcdataDeslig.getDate().getTime();

// transform to days
long diffDays = TimeUnit.DAYS.convert(diffMillis, TimeUnit.MILLISECONDS);

如果 getDate() 方法 return 改为 java.util.Calendar,只需将代码更改为 dchomolog.getDate().getTimeInMillis()

Java 8 或更高

如果您有可用的 java.time 类,它会更容易 - 也更可靠,因为这个 API 修复了 DateCalendar.

首先,您可以将日期转换为 Instant,然后使用 ChronoUnit 计算天数差异:

long diffDays = ChronoUnit.DAYS.between(dcdataDeslig.getDate().toInstant(), dchomolog.getDate().toInstant() ));