【问题标题】:Compare Dates Using JDateChooser使用 JDateChooser 比较日期
【发布时间】:2018-03-08 13:59:56
【问题描述】:

我有两盒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);

【问题讨论】:

  • compareTo 返回 -1,0 或 1 不是天数的差异
  • 请问如何比较天数。
  • 了解java.util.Calendar
  • 好的,我会看看你是怎么做到的,Tks。

标签: java date date-comparison


【解决方案1】:

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

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

据我了解,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() ));

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多