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

时间:2015-10-14 06:48:35

标签: java date

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

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月的几个日期。

2015年2月2日至2016年2月11日,2015年3月11日至2016年3月11日,2015年4月11日至2016年4月11日,11/05/2015至11/05/2016 ,2015年11月6日至2016年6月11日。

对于剩下的我看到差异为366.0。

我的问题是,为什么我们只在这几个日期看到这种奇特的行为。当date.getTime始终返回自1970年1月1日00:00:00 GMT后经过的毫秒时,会出现什么问题。

3 个答案:

答案 0 :(得分:3)

使用DateTime API。由于Java 8得到了这个,你应该像这样使用它:

md5(P, M):-
   phrase("$1$", E, _),
   crypt(P, E),
   name(M, E),
   format('~s~n', [E]).

?- md5("long live and prosper", "bf1835ce984d2a97d31409394fe00e9a").
   $1$AtnbRJvB$cZ4gZvG2Glelv8hfWztcY/
   false.

答案 1 :(得分:0)

为什么不使用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);

答案 2 :(得分:0)

我运行你的代码,我得到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