calendar java 并发_浅谈JAVA中Calendar类FirstDayOfWeek的问题

Calendar类的getFirstDayOfWeek

getFirstDayOfWeek()

获取一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY

getMinimalDaysInFirstWeek

getMinimalDaysInFirstWeek()

获取一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则此方法将返回 1。

以上是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

很好的解释了一周当中的第一天的问题,看以看到默认为星期天。注意这里的1代表星期天,int类型代表的含义如下所示

// 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号。其实很简单,脑子里可以想像下日历的样子,它是这个样子的

5b826f19504d0b669475975ae35bc925.png恩,不错,它就是window7里的样子。数一下呗,第3周,周一,呵呵,是16号了吧,没错吧。

再来看第二段输出

现在是2017-03-30

getFirstDayOfWeek值-->星期一

2017-01-09

呵呵,9号,这又是为什么呢?哦,原来代码里设置了一周的第一天是周一,看代码

cale2.setFirstDayOfWeek(Calendar.MONDAY); // 星期一

这个时候,日历的样子又变了,它是这个样子的

f9976fbf591bfda17d42e31d8fdbf130.png行了,数一下吧,第三周,周一,是不是9号了。

别急,还没有完了,再来看第三段输出

现在是2017-03-30

getFirstDayOfWeek值-->星期一

2017-01-16

呵呵,也是16号,为什么呢?

其实在看下面这张图的时候,已经能说明情况了

df1bc93415c3b2c599af8451c296d169.png

虽然第一周只有一天,但它却代表了一周。历害吧,哈哈。这未免有点太当浪费了吧,我们生活中,可是7天一周啊,有没有办法控制一下呢?当然有啊,看下面的代码

cale3.setMinimalDaysInFirstWeek(7); // 7天为一周

行了,这样的话,它就老老实实的7天一周了。不太理解的话,你可以看上图那张图,自己动手数三周,看是不是16号。

此文到此结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值