0

所以我有这个方法,roosterID 是用于根据当前年份和一年中的一周生成一个 ID,这是我想出的,但我认为这不是最好的方法,我尝试制作该方法在某些时候递归。这并没有按照我想要的方式工作。至少,我尝试过的方式。基本上说有一年有 53 周,我正在调用 rDAO 的加载方法,带有本周的 roosterID,以及接下来的 2 周。基本上,我希望 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);
    }       
}
4

1 回答 1

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

那应该这样做。

编辑:查看有关在年份边界发生的问题的评论。

于 2013-11-07T13:06:14.200 回答