我可以对我正在尝试制作的这种方法使用一些帮助。我有一个问题对象,它有一个目标日期,与今天的日期相比,我需要找出这个问题延迟了多少天。
想象这种情况:假设今天的日期是05-02-2013。
ID Target date
P1 02-02-2013
P2 27-01-2013
P3 26-01-2013
P4 05-12-2012
这意味着在接下来的几个月中,每个问题都延迟了这么多天:
DEC JAN FEB
P1 3
P2 4 5
P3 5 5
P4 26 31 5
问题不能超过 12 个月。
现在我需要一种方法来汇总这些数字,存储月份名称和迟到的总和。如果目标月份和现在月份相同,这是一个简单的情况,因为我可以减去天数并存储月份,但如果不是这样怎么办?我有以下代码:
List<Problem> problems = problemQuery.getResultList(); //Problems list is already filtered and contain only late problems.
Calendar now = Calendar.getInstance();
Calendar before = Calendar.getInstance();
Map<Integer, Integer> newMap = new TreeMap<Integer, Integer>(); //map that contains month number and daysLateCount
for (Problem p : problems) {
before.setTime(p.getTarget_date());
int nowMonth = now.get(Calendar.MONTH);
int beforeMonth = before.get(Calendar.MONTH);
if (beforeMonth == nowMonth) { //easy case when both dates have same month
int result = now.get(Calendar.DAY_OF_MONTH) - before.get(Calendar.DAY_OF_MONTH);
if (newMap.containsKey(nowMonth)) {
int newLateDaysValue = newMap.get(nowMonth)+result; //get old result and add the new
newMap.put(nowMonth, newLateDaysValue);
}
else {
newMap.put(nowMonth, result);
}
}
else {
//What to do here???
}
}
也许我什至可以跳过 if-else 子句并制作一个可以处理这两种情况的算法?我不知道请帮忙:)