没有得到正确的天差异在不同年份的两个日期之间

时间:2017-02-13 12:07:31

标签: java datetime

我正在使用java代码来查找天差异。在两个日期之间,请说'12 / 27/16'和'01 / 01/17'

代码是:

SimpleDateFormat format = new SimpleDateFormat("mm/dd/yy");

Date d1= format.parse("12/27/16");
Date d2=format.parse("01/01/17");

long diff = d1.getTime()-d2.getTime();
long diffDays= diff / (24*60*60*1000);

但是当我打印diffDays然后我得到352天而不是6天

2 个答案:

答案 0 :(得分:2)

如果您打印d1,则会看到:

Wed Jan 27 00:12:00 CET 2016

这绝对不是你输入的内容。原因是你的格式字符串错误:m表示分钟,而不是月份。正确的格式为"M/d/y"

而且,正如@nbokmans已经指出的那样,d1 - d2是向后的,应该是d2 - d1

另请参阅documentation for SimpleDateFormat

答案 1 :(得分:1)

正如@Thomas和@nbokmans所回答的那样,日期是错误的方式(但代码可以很容易地改变以忽略这一点)。但是,Java有很多便利类来处理时间和日期,这些都不为人所知。我将使用以下之一替换显式计算:

    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yy");

    Date d1 = format.parse("12/27/16");
    Date d2 = format.parse("01/01/17");

    long days1 = TimeUnit.MILLISECONDS.toDays(d2.getTime() - d1.getTime());
    long days2 = Duration.between(d1.toInstant(), d2.toInstant()).abs().toDays();
    long days3 = ChronoUnit.DAYS.between(d1.toInstant(), d2.toInstant());