用Java减去两个日期

use*_*146 25 java date

可能重复:
计算两个Java日期实例之间的差异

我知道这可能是一个重复的线程.但我想弄清楚一种计算两个日期之间差异的方法.从jquery开始,日期字符串采用格式'yyyy-mm-dd'.我把它读作一个字符串并像这样转换为java Date

Date d1 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.getParameter(date1));
Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.getParameter(date2));
Run Code Online (Sandbox Code Playgroud)

我想计算这两个日期之间的天数差异.

注意:我不能使用第三方API作为需要审核的API.

uld*_*all 25

编辑2018-05-28 我已将示例更改为使用Java 8的Time API:

LocalDate d1 = LocalDate.parse("2018-05-26", DateTimeFormatter.ISO_LOCAL_DATE);
LocalDate d2 = LocalDate.parse("2018-05-28", DateTimeFormatter.ISO_LOCAL_DATE);
Duration diff = Duration.between(d1.atStartOfDay(), d2.atStartOfDay());
long diffDays = diff.toDays();
Run Code Online (Sandbox Code Playgroud)

  • 这将在春天的夏令时边界上失败.示例(使用您的代码),`d1 = new Date(112,3-1,11,0,0,0)`,`d2 = new Date(112,3-1,12,0,0,0)` ,结果为"0". (3认同)

小智 9

假设您只能使用Date,您可以执行以下操作:

Date diff = new Date(d2.getTime() - d1.getTime());

在这里,您计算自“纪元”以来的毫秒差异,并在距纪元的偏移量处创建一个新的 Date 对象。就像其他人所说的那样:重复问题中的答案可能是更好的选择(如果您不受 限制Date)。


16d*_*ots 7

Date d1 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.
            getParameter(date1));
Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.
            getParameter(date2));

long diff = d2.getTime() - d1.getTime();

System.out.println("Difference between  " + d1 + " and "+ d2+" is "
        + (diff / (1000 * 60 * 60 * 24)) + " days.");
Run Code Online (Sandbox Code Playgroud)

  • 将在夏令时边界开始时失败。例如,d1=`2012-3-11` 和 d2=`2012-3-12` 结果为 0 天。 (3认同)