【发布时间】:2011-03-19 00:24:25
【问题描述】:
我需要找到两个日期之间的天数:一个来自报告,一个来自当前日期。我的sn-p:
int age=calculateDifference(agingDate, today);
这里calculateDifference 是私有方法,agingDate 和today 是Date 对象,仅供您澄清。我关注了 Java 论坛上的两篇文章,Thread 1/Thread 2。
它在独立程序中运行良好,尽管当我将其包含在我的逻辑中以从报告中读取时,我得到了一个不寻常的值差异。
为什么会发生,我该如何解决?
编辑:
与实际天数相比,我得到的天数更多。
public static int calculateDifference(Date a, Date b)
{
int tempDifference = 0;
int difference = 0;
Calendar earlier = Calendar.getInstance();
Calendar later = Calendar.getInstance();
if (a.compareTo(b) < 0)
{
earlier.setTime(a);
later.setTime(b);
}
else
{
earlier.setTime(b);
later.setTime(a);
}
while (earlier.get(Calendar.YEAR) != later.get(Calendar.YEAR))
{
tempDifference = 365 * (later.get(Calendar.YEAR) - earlier.get(Calendar.YEAR));
difference += tempDifference;
earlier.add(Calendar.DAY_OF_YEAR, tempDifference);
}
if (earlier.get(Calendar.DAY_OF_YEAR) != later.get(Calendar.DAY_OF_YEAR))
{
tempDifference = later.get(Calendar.DAY_OF_YEAR) - earlier.get(Calendar.DAY_OF_YEAR);
difference += tempDifference;
earlier.add(Calendar.DAY_OF_YEAR, tempDifference);
}
return difference;
}
注意:
不幸的是,没有一个答案可以帮助我解决问题。我在Joda-time 库的帮助下完成了this problem。
【问题讨论】:
-
异常差值是什么意思?请你说得更清楚些,或者举个例子?
-
能贴出calculateDifference方法的代码吗?
-
仅供参考,麻烦的旧日期时间类,如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 java.time 类取代。见Tutorial by Oracle。同样,Joda-Time 项目现在位于maintenance mode,团队建议迁移到 java.time 类。