我试图确定一周中的哪一天是该月的第一天,但由于某种原因,它没有返回正确的一周中的一天。
下面是我的代码:
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;
}
来自“int firstDay = cal.get(Calendar.DAY_OF_WEEK);”的行无法给我正确的星期几,并返回值 2 以获取本月的第一天(2011 年 1 月),而该月的第一天是星期六(7)。
我错过了什么吗?我已经调试并检查了 cal 变量设置的月份、年份和日期,它确实指示了今天的日期已更正,但是当我获取星期几时,它没有得到值 7。
最佳答案
我无法重现您遇到的问题。正如 Michael 所说,您还没有向我们展示很多代码,但 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
}
}
您是否忘记了 java.util.Calendar
中的月份是从 0 开始的?
如果您可以制作一个类似的简短但完整的程序来显示一周中的错误日期,请发布它。
事实上,您在 getFirstDayOfMonth
内递减 firstDay
两次 似乎有点奇怪,而且事实上它并不真正反射(reflect)方法的名称(如迈克尔提到的)。
最后,我对 Java 日期/时间处理的一贯建议:如果您可以可能使用 Joda Time而不是java.util.Calendar
,这样做。这是一个非常非常好的 API。
关于java获取星期几不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4645608/