我有一个脚本,显示了不同的日期,但我需要的是如果'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());
}
}
答案 0 :(得分:2)
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.getTime
和TimeUnit.MILLISECONDS.toDays
,因此假设一天总是24小时,那么您执行了从毫秒到天的转换。这并非总是如此。例如,在某些国家/地区,在春季开始夏季(DST)的春天,一天通常只有23小时,这将使您的代码对一天的计数过少。我既不使用的LocalDate
类也没有时间和时区,因此可以避免此问题。
我使用现代Java日期和时间API java.time的另一个原因是,与旧的日期和时间类(包括DateFormat
,{{1})相比,使用它通常要好得多}和SimpleDateFormat
。这些有一些设计上的问题,没有理由我们仍然要与它们抗争。
另一种选择是使用Date
或isBefore
比较日期,如果日期不符合预期,则显示一条消息。例如(在Google翻译的帮助下):
isAfter
链接: