Calendar类的getFirstDayOfWeek
// 获取一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY
getFirstDayOfWeek()
getMinimalDaysInFirstWeek
//获取一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则此方法将返回 1。
getMinimalDaysInFirstWeek()
以上是JDK的解释,getFirstDayOfWeek还好理解,即,一周的第一天是周日,还是周一的问题。
getMinimalDaysInFirstWeek就显示比较难懂了。它的意思是指,一周里的天数。
来看个例子吧,比如我想得到,2017年的第3周的周一,是哪一天。好了,看代码吧。
package org.test.util;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class CalendarTest02 {
static final String[] weeks = new String[] { "星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", };
/**
* @param args
*/
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cale = Calendar.getInstance();
System.out.println("现在是" + sdf.format(cale.getTime()));
System.out.println("getFirstDayOfWeek默认值-->" + cale.getFirstDayOfWeek());
System.out.println("getFirstDayOfWeek默认值-->" + weeks[cale.getFirstDayOfWeek() - 1]);
cale.set(Calendar.YEAR, 2017);
cale.set(Calendar.WEEK_OF_YEAR, 3);
cale.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(sdf.format(cale.getTime()));
System.out.println("--------------------------我是分割线------------------------");
/**
* #####################################
*/
Calendar cale2 = Calendar.getInstance();
System.out.println("现在是" + sdf.format(cale2.getTime()));
cale2.setFirstDayOfWeek(Calendar.MONDAY); // 星期一
System.out.println("getFirstDayOfWeek值-->" + weeks[cale2.getFirstDayOfWeek() - 1]);
cale2.set(Calendar.YEAR, 2017);
cale2.set(Calendar.WEEK_OF_YEAR, 3);
cale2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(sdf.format(cale2.getTime()));
System.out.println("--------------------------我是分割线------------------------");
/**
* #####################################
*/
Calendar cale3 = Calendar.getInstance();
System.out.println("现在是" + sdf.format(cale3.getTime()));
cale3.setFirstDayOfWeek(Calendar.MONDAY); // 星期一
cale3.setMinimalDaysInFirstWeek(7); // 7天为一周
System.out.println("getFirstDayOfWeek值-->" + weeks[cale3.getFirstDayOfWeek() - 1]);
cale3.set(Calendar.YEAR, 2017);
cale3.set(Calendar.WEEK_OF_YEAR, 3);
cale3.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(sdf.format(cale3.getTime()));
}
}
程序的输出为
现在是2017-03-30
getFirstDayOfWeek默认值-->1
getFirstDayOfWeek默认值-->星期天
2017-01-16
--------------------------我是分割线------------------------
现在是2017-03-30
getFirstDayOfWeek值-->星期一
2017-01-09
--------------------------我是分割线------------------------
现在是2017-03-30
getFirstDayOfWeek值-->星期一
2017-01-16
看到了吧,一会说是1月16号,一会说是1月9号。最后一段,是为了演示getMinimalDaysInFirstWeek、setMinimalDaysInFirstWeek。
第一部分的输出,
现在是2017-03-30
getFirstDayOfWeek默认值-->1
getFirstDayOfWeek默认值-->星期天
2017-01-16
// Sun.(Sunday) 星期天
public final static int SUNDAY = 1;
// Mon.(Monday) 星期一
public final static int MONDAY = 2;
// Tue.(Tuesday) 星期二
public final static int TUESDAY = 3;
// Wed.(Wednesday) 星期三
public final static int WEDNESDAY = 4;
// Thu.(Thursday) 星期四
public final static int THURSDAY = 5;
// Fri.(Friday) 星期五
public final static int FRIDAY = 6;
// Sat.(Saturday) 星期六
public final static int SATURDAY = 7;
好了,看到这里,想一下结果为什么是16号。其实很简单,脑子里可以想像下日历的样子,它是这个样子的
恩,不错,它就是window7里的样子。数一下呗,第3周,周一,呵呵,是16号了吧,没错吧。
再来看第二段输出
现在是2017-03-30
getFirstDayOfWeek值-->星期一
2017-01-09
cale2.setFirstDayOfWeek(Calendar.MONDAY); // 星期一
这个时候,日历的样子又变了,它是这个样子的
了,数一下吧,第三周,周一,是不是9号了。
别急,还没有完了,再来看第三段输出
现在是2017-03-30
getFirstDayOfWeek值-->星期一
2017-01-16
其实在看下面这张图的时候,已经能说明情况了
虽然第一周只有一天,但它却代表了一周。历害吧,哈哈。这未免有点太当浪费了吧,我们生活中,可是7天一周啊,有没有办法控制一下呢?当然有啊,看下面的代码
cale3.setMinimalDaysInFirstWeek(7); // 7天为一周
行了,这样的话,它就老老实实的7天一周了。不太理解的话,你可以看上图那张图,自己动手数三周,看是不是16号。