转自:http://www.it165.net/pro/html/201211/4230.html
setFirstDayOfWeek()和setMinimalDaysInFirstWeek()方法只对Calendar中WEEK_OF_YEAR,WEEK_OF_MONTH有影响。
关于JAVA的java.util.Calendar类里面的setFirstDayOfWeek()方法,我相信很多朋友都像我一样,误解了.认为设置了setFirstDayOfWeek(Calendar.MONDAY),再通过get(Calendar.DAY_OF_WEEK),如果是星期一的时候,就会返回一.这样想是错误的.不管你把setFirstDayOfWeek()设置为星期几,get(Calendar.DAY_OF_WEEK)都不是改变的.如果是星期一的话,永远返回都是2,对应的常量字锻Calendar.MONDAY是2.也就是说是星期一(MONDAY).
示例源码:
01.
package
cn.eplato.test;
02.
03.
import
java.util.Calendar;
04.
import
java.util.GregorianCalendar;
05.
06.
public
class
Test {
07.
08.
static
final
String[] weeks =
new
String[]{
"星期天"
,
"星期一"
,
"星期二"
,
"星期三"
,
"星期四"
,
"星期五"
,
"星期六"
,};
09.
/**
10.
* @param args
11.
*/
12.
public
static
void
main(String[] args) {
13.
// TODO Auto-generated method stub
14.
15.
Calendar cale =
new
GregorianCalendar(
2009
,
0
,
31
);
16.
System.out.println(cale.getTime().toLocaleString());
17.
System.out.println(
"FirstDayOfWeek/tMinimalDaysInFirstWeek/tweek"
);
18.
for
(
int
i =
1
; i <=
7
; i++) {
19.
cale.setFirstDayOfWeek(i);
//1为星期天,7为星期六
20.
21.
for
(
int
j =
1
; j <=
7
; j++) {
22.
cale.setMinimalDaysInFirstWeek(j);
23.
System.out.println(weeks[(i-
1
)]+
"/t"
+j+
"/t"
+cale.get(Calendar.WEEK_OF_MONTH));
24.
}
25.
26.
}
27.
}
28.
29.
}
运行结果:
Sat Jan 31 00:00:00 CST 2009
FirstDayOfWeek MinimalDaysInFirstWeek week
星期天 1 5
星期天 2 5
星期天 3 5
星期天 4 4
星期天 5 4
星期天 6 4
星期天 7 4
星期一 1 5
星期一 2 5
星期一 3 5
星期一 4 5
星期一 5 4
星期一 6 4
星期一 7 4
星期二 1 5
星期二 2 5
星期二 3 5
星期二 4 5
星期二 5 5
星期二 6 4
星期二 7 4
星期三 1 5
星期三 2 5
星期三 3 5
星期三 4 5
星期三 5 5
星期三 6 5
星期三 7 4
星期四 1 5
星期四 2 5
星期四 3 5
星期四 4 5
星期四 5 5
星期四 6 5
星期四 7 5
星期五 1 6
星期五 2 5
星期五 3 5
星期五 4 5
星期五 5 5
星期五 6 5
星期五 7 5
星期六 1 6
星期六 2 6
星期六 3 5
星期六 4 5
星期六 5 5
星期六 6 5
星期六 7 5
先附上该月的日历:
setFirstDayOfWeek的方法意思只对WEEK_OF_MONTH与WEEK_OF_YEAR有作用.
WEEK_OF_MONTH:当前Calendar日期对象是当前月的第几周.
WEEK_OF_YEAR:当前Calendar 日期对象是当前年的第几周.
setMinimalDaysInFirstWeek的方法的作用是决定达到最少多少天才可以第一周才可以算一周,并记入WEEK_OF_MONTH
例如: www.it165.net
当setFirstDayOfWeek(1),星期第一天是星期天时.
1号前面的天数不算在第一周里面,如果是从星期天开始的,那么星期的最后一天是星期六.第一周只有3天.
第二周4号到10号.
第三周11号到17号.
第四周18号到24号.
第五周为25到31号.
如果设置setMinimalDaysInFirstWeek()为1-3,那么2009年1月31号是这第月的第五周.
如果设置setMinimalDaysInFirstWeek()为4-7,那么2009年1月31号是这第月的第四周,因为第一周不满4天。
一个月也可以有六周,例如:
setFirstDayOfWeek(7),即星期六为一周的开始,setMinimalDaysInFirstWeek()为1-2的时候,cale.get(Calendar.WEEK_OF_MONTH)等于6.此时:1-2算一周,3-9第二周,10-16第三周,17-23第四周,24-30,第五周,31号第六周。