使用 JDateChooser 比较日期
Compare Dates Using JDateChooser
我有两盒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);
当您调用 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 修复了 Date
和 Calendar
.
首先,您可以将日期转换为 Instant
,然后使用 ChronoUnit
计算天数差异:
long diffDays = ChronoUnit.DAYS.between(dcdataDeslig.getDate().toInstant(), dchomolog.getDate().toInstant() ));
我有两盒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);
当您调用 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 修复了 Date
和 Calendar
.
首先,您可以将日期转换为 Instant
,然后使用 ChronoUnit
计算天数差异:
long diffDays = ChronoUnit.DAYS.between(dcdataDeslig.getDate().toInstant(), dchomolog.getDate().toInstant() ));