如何计算帐户日节省班次的日期之间的天数?

时间:2012-01-10 10:29:12

标签: java date calendar dst

我找到了以下建议:

Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.set(2007, 01, 10);
calendar2.set(2007, 07, 01);
long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffSeconds = diff / 1000;
long diffMinutes = diff / (60 * 1000);
long diffHours = diff / (60 * 60 * 1000);
long diffDays = diff / (24 * 60 * 60 * 1000);

但是,当从冬季到夏季更换时间时,会有1小时的差异。有一个常用的方法来计算这个吗?感谢。

2 个答案:

答案 0 :(得分:2)

您应该考虑使用joda-time库,它提供了更有用的日期时间界面。例如,您的问题就像这样解决了:Days.daysBetween(startInstant, endInstant).getDays()

至于使用标准日历 - 我不能考虑更好的选择,然后使用Calendar.get(Calendar.DAY_OF_YEAR) - 这将使您能够在一个日历年内获得天数差异。为了将这种方法传播到几年,我建议只迭代开始和结束时刻之间的所有中间年份,总结Calendar.getActualMaximum(DAY_OF_YEAR)。不太方便,但是......

答案 1 :(得分:2)

您需要设置每个日历的时区。

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getInstance%28java.util.TimeZone%29

BTW:Joda Time可能是一个更好的解决方案。

Java不支持闰秒。因此,它将UTC视为与GMT相同。