Java& Android Calender每个月都可以获取所有日期

时间:2017-02-27 06:42:52

标签: java android

我想每个月都要抽几天。

    this.mCalander = Calendar.getInstance();
    this.mDf = new SimpleDateFormat("yyyy-MM-dd");

    for (int i = 0; i <= 0; i++) {
        mCalander.set(Calendar.YEAR, this.nextYear);
        for (int j = 0; j <= 11; j++) {
            mCalander.set(Calendar.MONTH, j);
            Log.d("INFO", "MONTH : " + (j + 1));

            int maxDay = mCalander.getActualMaximum(Calendar.DAY_OF_MONTH);
            for (int k = 1; k <= maxDay; k++) {
                mCalander.set(Calendar.DAY_OF_MONTH, k);
                Log.d("INFO", mDf.format(this.mCalander.getTime()));
            }
        }
    }

但问题是它打印错误,如

    2017-01-30
    2017-01-31
    MONTH : 2
    2017-03-01
    2017-03-02

如你所见

    Log.d("INFO", "Month : " +(j+1));
    for(k=0; k<maxDate; k++) {
       Log.d("INFO", mDf.format(this.mCalander.getTime()));
    }

你能告诉我如何修理或解释为什么会这样吗? 提前谢谢

1 个答案:

答案 0 :(得分:0)

日历为您提供add()方法来增加/减少日历中任何字段的值,例如添加年,月,日等。点击此处:Calendar.add(int, int)

所以你也可以按照下面的方法,你也可以循环年份范围,我已经设置了2017年的演示。

mCalander.set(Calendar.YEAR, 2017);
mCalander.set(Calendar.MONTH, 0);
int totalMonths = mCalander.getActualMaximum(Calendar.MONTH);
for (int j = 0; j <= totalMonths; j++) {
    Log.d("INFO", "MONTH : " + j);
    int maxDay = mCalander.getActualMaximum(Calendar.DAY_OF_MONTH);
    mCalander.set(Calendar.DAY_OF_MONTH, 1);
    for (int k = 1; k <= maxDay; k++) {
        Log.d("INFO", k + " - " + mDf.format(mCalander.getTime()));
        mCalander.add(Calendar.DAY_OF_MONTH, 1);
    }
}

希望这会有所帮助。