星期日至星期六的日历日值为1-7. getFirstDayOfWeek根据使用的Locale返回其中一个值(通常是星期一或星期日). Calendar.getInstance使用默认的Locale取决于手机的设置,在您的情况下,星期一作为一周的第一天.
一种解决方案是使用其他Locale:
Calendar.getInstance(Locale.US).getFirstDayOfWeek()
将返回1,这是Calendar.SUNDAY的值
其他解决方案是使用选择的星期几值
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
问题是,日历也在使用其内部第一天的星期值.例:
Calendar mondayFirst = Calendar.getInstance(Locale.GERMANY); //Locale that has Monday as first day of week
mondayFirst.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
log(DateUtils.formatDateTime(context, mondayFirst.getTimeInMillis(), 0));
//prints "May 19" when runned on May 13
Calendar sundayFirst = Calendar.getInstance(Locale.US); //Locale that has Sunday as first day of week
sundayFirst.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
log(DateUtils.formatDateTime(context, sundayFirst.getTimeInMillis(), 0));
//prints "May 12" when runned on May 13
如果您不想使用区域设置或者您需要在一周的第一天使用其他日期,则最好自己计算一周的开始日期.