显示浮点值的日期之间的天数
我已经编写了一个代码来按照以下方式计算日期之间的天数
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = date.parse(startDate);
Date date2 = date.parse(endDate);
long difference = (date2.getTime()-date1.getTime())/(24*60*60*1000);
我的工作是找出startDate和endDate之间的术语是否恰好是一年。
在计算日期之间的差异后,我最初检查年份类型(闰年/正常年份)。
如果不是闰年,那么我会检查一下是否有差异是365
如果闰年,那么我会检查是否差异是366。
但在11月的几个日期里说
startDate = 11/04/2015(MM / dd / yyyy)endDate = 11/04/2016(MM / dd / yyyy)
差异计算为365,其中代码期望366,因为endDate年2016年是闰年,并且结束日期的月份是在2月以后。
真正发生的是我们得到的绝对差异是365.9但不是366.0
根据我的观察,这种情况只发生在11月份的几个日期。
11/02/2015至11/02/2016,11/03/2015至11/03/2016,11/04/2015至11/04/2016,11/05/2015至11/05/2016 2016 / 06/2015至11/06/2016。
剩下的我看到差异为366.0。
我的问题是,为什么我们只在这几天看到这种奇特的行为。 date.getTime的问题始终是从1970年1月1日,格林尼治标准时间00:00:00开始经过的毫秒数。
使用DateTime API。 由于Java 8得到了这个,你应该像这样使用它:
private static boolean isYearBetween(String start, String end) {
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate startDate = LocalDate.parse(start, pattern);
LocalDate endDate = LocalDate.parse(end, pattern);
Period between = Period.between(startDate, endDate).normalized();
return Period.ofYears(1).equals(between.isNegative() ? between.negated() : between);
}
为什么不使用java 8附带的新功能:java.time.LocalDateTime? 然后,您可以使用java.time.format.DateTimeFormatter轻松设置日期和时间。 对于闰年来说,它比java.Date更好。
LocalDate date = LocalDate.parse("yyyy-MM-dd");
LocalDate date1 = date.parse(startDate);
LocalDate date2 = date.parse(endDate);
我运行你的代码,我得到了366
SimpleDateFormat date = new SimpleDateFormat("MM/dd/yyyy");
Date date1 = date.parse("11/02/2015");
Date date2 = date.parse("11/02/2016");
long difference = (date2.getTime() - date1.getTime()) / (24 * 60 * 60 * 1000);
System.out.println("Difference " + difference);
产量
Difference 366
问题中的所有其他日期也一样。
对于非闰年,它按预期打印365
。