显示浮点值的日期之间的天数

我已经编写了一个代码来按照以下方式计算日期之间的天数

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

链接地址: http://www.djcxy.com/p/18541.html

上一篇: Days between dates showing float value

下一篇: Timespan contains leapyear