java获取星期几是不准确的

jon*_*ney 0 java date

我想确定一周的哪一天是一个月的第一天,但​​出于某种原因,它并没有让我回到正确的一周.

这是我的代码如下:

CalendarMonth[] months = CalendarUtils.constructMonthViewArray(new GregorianCalendar());


    public static CalendarMonth[] constructMonthViewArray(Calendar cal) {
        CalendarMonth[] months = new CalendarMonth[CALENDAR_GRID_SIZE];


        int year = cal.get(cal.YEAR);
        int month = cal.get(cal.MONTH);;
        // calculate how many days in the month
        int numOfDays = getNumOfDaysInMonth(cal);
        // calculate what day(mon-sunday) is the 1st of the month
        int firstDayOfMonth = getFirstDayOfMonth(cal);



private static int getFirstDayOfMonth(Calendar cal) {
        int firstDay = cal.get(Calendar.DAY_OF_WEEK);

        Log.d(TAG, "");

        // decrement it because our array deals with values 0-6(indexes)
        firstDay--;


        if (firstDay == 0) {
            firstDay = 6;
        } else {
            // decrement again so that the days start from 0.
            firstDay--;
        }
        return firstDay;
    }
Run Code Online (Sandbox Code Playgroud)

来自"int firstDay = cal.get(Calendar.DAY_OF_WEEK);"的行 没有给我正确的一周中的一天,并返回值2,以获得本月的第一天(2011年1月),当月的第一天是星期六(7).

我错过了什么吗?我已经调试并检查了cal变量设置的月份,年份和日期,它确实表明今天的日期已更正,但是当我得到星期几时它没有得到值7.

Jon*_*eet 11

我无法重现你所看到的问题.正如迈克尔所说,有很多代码没有向我们展示,但Calendar.getDayOfWeek绝对有效:

import java.util.*;

public class Test {
    public static void main(String[] args) {
        Calendar calendar = new GregorianCalendar();
        calendar.set(2011, 0, 1); // 0 = January
        System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); // Prints 7
    }
}
Run Code Online (Sandbox Code Playgroud)

您是否忘记了几个月是0 java.util.Calendar

如果您可以制作类似的简短但完整的节目,以显示一周中的错误日期,请发布.

你正在递减的事实firstDay 两倍之内getFirstDayOfMonth,似乎有些奇怪,还有一个事实,即它并没有真正反映该方法的名称(如迈克尔提到的).

最后,我对Java的日期/时间处理常数的建议:如果你能可能使用约达时间代替java.util.Calendar,这样做.这是一个更好,更好的API.

  • Urgggh ......几个月都是0,但是日子不是......我浪费了一个小时.一周的一周终于为此+1了. (3认同)