使用JDateChooser比较日期

时间:2018-03-08 13:59:56

标签: java date date-comparison

我有两箱JDateChooser,我想进行以下比较:

  • 用户将通知第一个日期
  • 当它完成第二个日期后,我做了一个比较,包括:
    • 如果第二个日期大于或等于11天,将显示以下消息:
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);

1 个答案:

答案 0 :(得分:0)

当您致电sdf.format时,结果为String。它不是日期,而是代表日期的文字

比较字符串不会给你2个日期之间的区别 - 字符串比较将告诉你它们是否按字母顺序排列,因为字符串代表一系列字符 - 文本 - 仅此而已。

据我所知,dchomolog.getDate()会返回java.util.Date,因此getTime()方法会返回数字时间戳值,即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()方法返回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() ));