Calendar自然周

        java中Calendar类获取的自然周是从周日到周六,但是我们理解的一周是从周一到周日。所以依然使用Calendar记录weekOfYear,dayOfWeek会有两个问题:

       1.周日这一天,按照两种计算方式所在的周(weekOfYear)不同;

       2.查询一周的记录时,周几(dayOfWeek)是从周日到周六。


       处理方式:

       1.判断某天属于第几周

    /**
     * 判断具体某个周日属于第几周
     */
    @Test
    public void getWeekOfYear() throws ParseException{
        String time = "2017-01-08";
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        
        Date date = format.parse(time);

        /*
         * 不做任何设置
         */

        Calendar c = Calendar.getInstance();
        c.setTime(date);
        System.out.println(c.get(Calendar.WEEK_OF_YEAR));

        /*
         * 设置一周从周一开始,最少两天
         */

        Calendar c1 = Calendar.getInstance();
        c1.setTime(date);
        c1.setMinimalDaysInFirstWeek(2);// 设置第一周最少2天
        c1.setFirstDayOfWeek(Calendar.MONDAY);// 设置一周的第一天为周一
        System.out.println(c1.get(Calendar.WEEK_OF_YEAR));
        /*
         * setFirstDayOfWeek:设置一周从周几开始
         * setMinimalDaysInFirstWeek:设置第一周最少天数
         * 这个是从一年的第一天开始计算,当前日期属于满足规则的第几周
         */
       

        /*
         * 设置一周从周日开始,最少两天
         */        Calendar c2 = Calendar.getInstance();
        c2.setTime(date);
        c2.setMinimalDaysInFirstWeek(2);// 设置第一周最少2天
        c2.setFirstDayOfWeek(Calendar.SUNDAY);// 设置一周的第一天为周日
        System.out.println(c2.get(Calendar.WEEK_OF_YEAR));
        /*
         * setFirstDayOfWeek:设置一周从周几开始
         * setMinimalDaysInFirstWeek:设置第一周最少天数
         * 这两个条件满足一个就能表示一周:2017-01-01满足一周从周日开始
         */

        }

        打印:2
                  1
                  2



        2.周几

       Calendar中周几的数值是固定的,SUNDAY就是1,MONDAY就是2,所以要存入想要的周几就要条件判断。


       3.根据周查询日期

       @Test
        public void getDate(){
        int year = 2017;
        int week = 2;
        /*
         * 不做任何设置
         */
        System.out.println("不做任何设置");
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);// 设置年
        c.set(Calendar.WEEK_OF_YEAR, week); // 设置周
        c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 设置周几
        System.out.println("周一:" + c.getTime());// 获取日期
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 设置周几
        System.out.println("周日:" + c.getTime());// 获取日期
        System.out.println();
        
        /*
         * 设置一周从周一开始,最少两天
         */
        System.out.println("设置一周从周一开始,最少两天");
        Calendar c1 = Calendar.getInstance();
        c1.setFirstDayOfWeek(Calendar.MONDAY);
        c1.setMinimalDaysInFirstWeek(2);// 设置一周最少2天
        
        c1.set(Calendar.YEAR, year);// 设置年
        c1.set(Calendar.WEEK_OF_YEAR, week); // 设置周
        c1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);// 设置周几
        System.out.println("周一:" + c1.getTime());
        c1.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);// 设置周几
        System.out.println("周日:" + c1.getTime());
        System.out.println();
        
        /*
         * 设置一周从周天开始,最少两天
         */
        System.out.println("设置一周从周天开始,最少两天");
        Calendar c2 = Calendar.getInstance();
        c2.setFirstDayOfWeek(Calendar.SUNDAY);
        c2.setMinimalDaysInFirstWeek(2);// 设置一周最少2天
        
        c2.set(Calendar.YEAR, year);// 设置年
        c2.set(Calendar.WEEK_OF_YEAR, week); // 设置周
        c2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        System.out.println("周一:" + c2.getTime());
        c2.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("周日:" + c2.getTime());
        }

       打印:

       不做任何设置
        周一:Mon Jan 09 17:34:07 GMT+08:00 2017
        周日:Sun Jan 08 17:34:07 GMT+08:00 2017

       设置一周从周一开始,最少两天
       周一:Mon Jan 09 17:34:07 GMT+08:00 2017
       周日:Sun Jan 15 17:34:07 GMT+08:00 2017

      设置一周从周天开始,最少两天
      周一:Mon Jan 09 17:34:07 GMT+08:00 2017
      周日:Sun Jan 08 17:34:07 GMT+08:00 2017



综上:c1.setFirstDayOfWeek(Calendar.MONDAY);
        c1.setMinimalDaysInFirstWeek(2);// 设置一周最少2天

       这两个方法定义了一个自然周的条件(默认是Sunday和1)

     获取自然周weekOfYear后,根据自然周查询日期也要设置相应的条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值