我已经编写了一个代码来按照以下方式计算日期之间的天数
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后经过的毫秒时,会出现什么问题。
答案 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
。