java程序中,如何设置周一为一周的开始?如何设置周一为一周的第一天? 或者说,如何理解java的setFirstDayOfWeek()方法?

5 篇文章 0 订阅
1 篇文章 0 订阅

      java中,在统计周的时候,默认一周是从周日开始的。但因为生活习惯或项目需求,我们经常需要改变一周的起始日期,这里说一下解决办法以及我陷入的误区。
      

一、 解决办法

       使用Calendar类可以解决,这个类很灵活,功能很强大。
      举个例子:
      2020年1月1日是星期三,按照java的默认规则,2020年的第一个星期是:2019-12-29 星期日 至 2020-01-04 星期六。下面是日历:
在这里插入图片描述
      因为项目需求,我们需要改成周一为一周的起始,即:2020年的第一个星期是:2019-12-30 星期一 至 2020-01-05 星期日。
      代码如下:

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class test {

    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        c.set(2020, 0, 1);
        System.out.println( sdf.format( c.getTime() ) );

        // 先看一下2020-01-01是一年中的第几周
        System.out.println( c.get( Calendar.WEEK_OF_YEAR) );

             System.out.println("--------------------------------- ");
        // 在不修改为周一的情况下,2019-11-29 周日 仍然是 2020年的第一周
        // 而 2020-01-05 周日 是2020年的第二周
        c.set(2019, 11, 29);
        System.out.println( c.get( Calendar.WEEK_OF_YEAR) ); // 输出1,第一周
        c.set(2020, 0, 5);
        System.out.println( c.get( Calendar.WEEK_OF_YEAR) ); // 输出2,第二周

        System.out.println("--------------------------------- ");
        // 修改周的起始日期,则周的起止变为: 周一到周日
        // 2019-11-29 周日,变为 2019年的最后1周; 2020-01-05 周日 是2020年的第1周
        c.setFirstDayOfWeek( Calendar.MONDAY );
        c.set(2019, 11, 29);
        System.out.println( c.get( Calendar.WEEK_OF_YEAR) ); // 输出52,2019年的最后一周
        c.set(2020, 0, 5);
        System.out.println( c.get( Calendar.WEEK_OF_YEAR) ); // 输出1,第一周
    }
}

      输出:

2020-01-01
1
--------------------------------- 
1
2
--------------------------------- 
52
1

      

二、 我走进的误区

      这个理解上还是比较容易的,但是有时候就防不住不小心钻进了牛角尖走不出来了,我就碰到了这种情况…
      在Calendar中,周日返回1,周一返回2,依次类推。而setFirstDayOfWeek()只影响WEEK_OF_YEAR。(未验证是否影响其他维度)
      而我不知道怎么想的,这么认为:因为一周的起始日是周日,所以周日返回1,周一返回2;那么当我执行 setFirstDayOfWeek( Calendar.MONDAY)以后,周日就应该返回7,而周一应该返回1…
      我想了好长时间,才走出来…不知道有没有跟我一样可爱的男孩子(๑• . •๑)
      

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值