我有两箱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);
答案 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.time
个类,那么它会更容易 - 也更可靠,因为此API修复了Date
和Calendar
的许多漏洞。
首先,您可以将日期转换为Instant
,然后使用ChronoUnit
计算天数差异:
long diffDays = ChronoUnit.DAYS.between(dcdataDeslig.getDate().toInstant(), dchomolog.getDate().toInstant() ));