所以我有这个方法,roosterID用于根据当前年份和一年中的一周生成ID,这是我想出来的,但我不认为这是最好的方法,我尝试在某个时候使该方法递归。 这不是我想要的方式。 至少,我试过的方式。 基本上说有一年有53周,我正在调用rDAO的加载方法,本周使用roosterID,以及未来几周。 基本上我希望roosterID在201353之后的一周是20141,只需使用roosterID + 1就可以使它成为201354。 我希望我的解释不是垃圾。
下面的代码有效,我认为它有点肮脏和不专业,并且可以做得更好,如果有任何变化我必须重做几乎所有的代码,所以我想要一些建议。
public void getWeekTabs(){
gc.setFirstDayOfWeek(Calendar.MONDAY);
if(gc.get(Calendar.WEEK_OF_YEAR) <= gc.getWeeksInWeekYear()-2){
roosterID = Integer.parseInt(Integer.toString(gc.get(Calendar.YEAR)) + Integer.toString(gc.get(Calendar.WEEK_OF_YEAR)));
rDAO.load(roosterID);
rDAO.load(roosterID +1);
rDAO.load(roosterID +2);
}else if(gc.get(Calendar.WEEK_OF_YEAR) == gc.getWeeksInWeekYear()-1){
roosterIDtemp = Integer.parseInt(Integer.toString(gc.get(Calendar.YEAR) +1 ) + Integer.toString(1));
rDAO.load(roosterID);
rDAO.load(roosterID +1);
rDAO.load(roosterIDtemp);
}else if(gc.get(Calendar.WEEK_OF_YEAR) == gc.getWeeksInWeekYear()){
roosterIDtemp = Integer.parseInt(Integer.toString(gc.get(Calendar.YEAR) +1 ) + Integer.toString(1));
rDAO.load(roosterID);
rDAO.load(roosterIDtemp);
rDAO.load(roosterIDtemp +1);
}
}
答案 0 :(得分:4)
首先,这很奇怪:
roosterID = Integer.parseInt(Integer.toString(gc.get(Calendar.YEAR)) + Integer.toString(gc.get(Calendar.WEEK_OF_YEAR)));
这样做:
public String makeRoosterId(Calendar gc) {
return String.format("%d%d", gc.get(Calendar.YEAR), gc.get(Calendar.WEEK_OF_YEAR));
}
如果您想要201401而不是20141,则可以修改格式表达式来执行此操作。现在,加载你的三个项目:
Calendar c = Calendar.getInstance(); // current date
rDAO.load(makeRoosterId(c)); // Load this week
c.add(Calendar.WEEK_OF_YEAR, 1);
rDAO.load(makeRoosterId(c)); // Load next week
c.add(Calendar.WEEK_OF_YEAR, 1);
rDAO.load(makeRoosterId(c)); // Load the week after that
应该这样做。
编辑:查看有关年度边界发生的问题的评论。