java-如何计算2个日期的剩余天数

时间:2019-01-13 06:43:31

标签: java database netbeans

我有一个脚本,显示了不同的日期,但我需要的是如果'tglkembali'低于'tempo'则获得0天,但是我键入的脚本同时计算了两种方式

try{
    String tglsatu = tempo.getText();
    DateFormat date = new SimpleDateFormat("yyyy-MM-dd");
    Date tglAwal = (Date) date.parse(tglsatu);
    String tgldua = tglKembali.getText();
    Date tglAkhir = (Date) date.parse(tgldua);

    long bedaHari = tglAkhir.getTime() - tglAwal.getTime();
    terlambat.setText(TimeUnit.MILLISECONDS.toDays(bedaHari) + " hari");

    }catch(Exception e){
        JOptionPane.showMessageDialog(this, e.getMessage());
    }

}  

1 个答案:

答案 0 :(得分:2)

java.time

    try {
        String tglSatu = "2019-01-07";
        LocalDate tglAwal = LocalDate.parse(tglSatu);
        String tglDua = "2019-01-18";
        LocalDate tglAkhir = LocalDate.parse(tglDua);

        long bedaHari = ChronoUnit.DAYS.between(tglAwal, tglAkhir);
        if (bedaHari < 0) {
            bedaHari = 0;
        }
        System.out.println("" + bedaHari + " hari");

    } catch (DateTimeParseException dtpe){
         System.out.println(dtpe.getMessage());
    }

如上面的代码片段所述,当日期按预期顺序排列时,输​​出应与您的一致:

  

11哈里

但是,如果我更改此行,以便交换日期:

        String tglDua = "2018-12-29";

现在我的代码输出就是您所要求的:

  

0哈里

更确切的情况:当我说在前一种情况下输出是相同的时,这通常是正确的。您使用了Date.getTimeTimeUnit.MILLISECONDS.toDays,因此假设一天总是24小时,那么您执行了从毫秒到天的转换。这并非总是如此。例如,在某些国家/地区,在春季开始夏季(DST)的春天,一天通常只有23小时,这将使您的代码对一天的计数过少。我既不使用的LocalDate类也没有时间和时区,因此可以避免此问题。

我使用现代Java日期和时间API java.time的另一个原因是,与旧的日期和时间类(包括DateFormat,{{1})相比,使用它通常要好得多}和SimpleDateFormat。这些有一些设计上的问题,没有理由我们仍然要与它们抗争。

另一种选择是使用DateisBefore比较日期,如果日期不符合预期,则显示一条消息。例如(在Google翻译的帮助下):

isAfter

链接: