【发布时间】:2017-08-24 05:27:59
【问题描述】:
根据this question,我计算了java中两个日期之间的天数。 程序如下
SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";
try {
Date date1 = myFormat.parse(inputString1);
Date date2 = myFormat.parse(inputString2);
long diff = date2.getTime() - date1.getTime();
System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
} catch (ParseException e) {
e.printStackTrace();
}
但是当日期在夏令时区时,我遇到了问题。就像 EDT 到 EST。例如,当我们计算 (MAR 01, 2017) 到 (MAR 30, 2017) 之间的天数时,实际计数应该是 29,但上述程序的结果是 28。
【问题讨论】:
-
使用 LocalDate 代替 Date
-
如果您使用的是 java 8,请使用 ZonedDateTime
-
您的问题不清楚:您想知道两个时刻之间的 24 小时时间段数吗?或者您想知道两个日期之间经过的天数?完全不是一回事。一大区别:夏令时与日期和整日无关。
-
@BasilBourque 我们的生产环境是Linux,机器本地时区是EST5EDT。我的程序的逻辑是,在创建业务对象时,将使用名为 start_date 的日期(2017 年 3 月 1 日)初始化日历对象,并在执行一些业务逻辑后返回另一个名为 event_date 的日期为(2017 年 3 月 1 日)的日历对象.现在根据业务逻辑需要计算 start_date 和 event_date 之间的天数。要计算 start_date 和 event_date 之间的天数,应用的逻辑如下
-
((event_date.getTimeInMillis() - start_date.getTimeInMillis())/86400000) 这给出了错误的结果,我也试过了。TimeUnit.DAYS.convert(event_date.getTimeInMillis() - start_date.getTimeInMillis (), TimeUnit.MILLISECONDS)。如上所述,这也给出了错误的结果。我最后的解决方法是 ((event_d ((event_date.getTimeInMillis()/86400000 - start_date.getTimeInMillis()/86400000))。这没有问题。