我正在使用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天
答案 0 :(得分:2)
如果您打印d1
,则会看到:
Wed Jan 27 00:12:00 CET 2016
这绝对不是你输入的内容。原因是你的格式字符串错误:m
表示分钟,而不是月份。正确的格式为"M/d/y"
。
而且,正如@nbokmans已经指出的那样,d1 - d2
是向后的,应该是d2 - d1
。
答案 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());