以no表示计算两个日期(java.util.Date
)之间的差异。几天看起来很简单,我们可以找到不同的方法来做到这一点。我使用以下代码计算日期差异:
public static long daysBetween(Calendar startDate, Calendar endDate) {
Calendar date = (Calendar) startDate.clone();
long daysBetween = 0;
while (date.before(endDate)) {
date.add(Calendar.DAY_OF_MONTH, 1);
daysBetween++;
}
return daysBetween;
}
在main()
中,我使用了以下两个日期:
Calendar c1 = Calendar.getInstance();
c1.set(2011, 1, 1);
Calendar c2 = Calendar.getInstance();
c2.set(2011, 1, 31);
long difference = daysBetween(c1, c2); //
但变量difference
的值不一致。它有时是30,有时是31.所以,为什么会发生这种情况。
有没有任何解决方案可以使用该方法产生一致的输出?
答案 0 :(得分:3)
您正在设置日历的日期部分,而不是时间部分。
有时,时钟会在调用getInstance()
之间打勾,有时则不会,因此不一致。
选项:
LocalDate
)。这里的一个重要道德是,如果你能找到一种代表你所拥有的确切信息的类型,而不是其他任何东西,这可能是一个很好的契合并导致更少的并发症。使用LocalDate
,您甚至不必进行循环,因为Joda Time对计算两个值之间的差异有很好的支持。
LocalDate date1 = new LocalDate(2011, 1, 1);
LocalDate date2 = new LocalDate(2011, 1, 31);
Days period = Days.daysBetween(days1, days2);
int days = period.getDays();
答案 1 :(得分:2)
您只设置年,月和日。小时,分钟,秒和毫秒是当前时间(因此每次运行时都不同)
我建议您使用Joda Time的LocalDate,因为它似乎完全符合您的要求。