有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数据库如何计算两个日期的剩余天数

我有一个显示不同日期的脚本,但如果“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) 个答案

  1. # 1 楼答案

    爪哇。时间

        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 hari

    但是,如果我更改这一行以交换日期:

            String tglDua = "2018-12-29";
    

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

    0 hari

    角落案例:当我说输出与前一种情况相同时,这通常是正确的。您使用了Date.getTimeTimeUnit.MILLISECONDS.toDays,所以您执行了从毫秒到天的转换,假设一天总是24小时长。情况并非总是如此。例如,在一些国家的春季夏季(DST)开始时,一天通常只有23小时,这将导致代码计算的一天太少。我使用的LocalDate类既没有一天中的时间,也没有时区,因此避免了这个问题

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

    另一种选择是使用isBeforeisAfter比较日期,如果它们不符合预期顺序,则显示消息。例如(在谷歌翻译的帮助下):

            if (tglAkhir.isBefore(tglAwal)) {
                System.out.println("Tanggal berada dalam urutan yang salah");
            } else {
                long bedaHari = ChronoUnit.DAYS.between(tglAwal, tglAkhir);
                System.out.println("" + bedaHari + " hari");
            }
    

    链接: