代码之家  ›  专栏  ›  技术社区  ›  WillGreco

使用JDateChooser比较日期

  •  -2
  • WillGreco  · 技术社区  · 6 年前

    我有两盒 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 回复  |  直到 6 年前
        1
  •  0
  •   pandd    6 年前

    当你打电话的时候 sdf.format ,结果是 String 。这不是约会,而是 表示日期的文本

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

    据我所知, dchomolog.getDate() 返回a 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修复了 Date Calendar

    首先,您可以将日期转换为 Instant ,然后使用 ChronoUnit 要计算天数差异,请执行以下操作:

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