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后,根据自然周查询日期也要设置相应的条件。

Calendar自然周相关推荐

  1. 如何在outlook里显示自然周的周数

    一年有52周,我们如何在outlook里方便的查看自然周的序号呢?比如2019年11月25日到29日是2019年的第几周?outlook默认是没有显示这个序号的. option设置里,打开Calend ...

  2. Date-如何获取自然天,自然周,自然月,自然年?

    前言:有次在开发过程中,遇到一个需求.需要获取上count个自然天,自然周,自然月,自然年. 当时第一反应就是有没有工具类可以直接实现这个功能. 经过一番的探索,最终发现了这个工具类:Calendar ...

  3. 查询某一日期所在的自然周,以周一为开始

    查询某一日期所在的自然周,以周一为开始 代码如下: import java.text.SimpleDateFormat; import java.util.Calendar; import java. ...

  4. 获取某一年指定自然周的开始时间和结束时间

    获取某一年指定自然周的开始时间和结束时间 package com.playmath.playmathcrm.util; import java.text.ParseException; import ...

  5. 【scala】获取当前时间的上一个自然周以及自然周集合;获取当前时间的上一个自然月以及自然月的第一天与最后一天

    获取当前时间的上一个自然周的开始时间: import java.text.SimpleDateFormat import java.util.{Calendar, Date}def getLastWe ...

  6. java 获取当前时间所在自然周起止时间及自然周中的每一天

    有的时候需要获取当前时间所在自然周中的起始和截止时间,或者某个时间段内里的每一天的日期 1.先来解决获取自然周中的起止时间 /*** 获取当前时间所在自然周的起止日期** @return*/publi ...

  7. 获取自然周 自然月 区间

    public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");/*** @Descri ...

  8. mysql查询最近一个自然周_自然周与自然月的Hive统计SQL

    按照周或者月统计活跃数: 周: SELECT week, COUNT(DISTINCT pin), business_type FROM ( SELECT DISTINCT user_log_acct ...

  9. Oracle中按天、自然周、月、季、年周期统计

    在Oracle中,Mysql中以及Hive中,SQL实现同样的功能有时候可能要遵循不同的语法结构,尤其在日期操作方面区别较为明显.接下来,将Oracle中常用的周期统计梳理出来. 1. 按天统计 Or ...

最新文章

  1. 从谷歌离职回到西湖大学,只为让AI听懂你的悲伤!
  2. The import java.util cannot be resolved The import javax.servlet cannot be resolved
  3. 一个判断射线和三角形相交的函数
  4. [PBI催化剂]国际水准,中国首款重量级PowerBIDeskTop外部工具问世
  5. Linux 组合命令/命令组合的符号
  6. python实现简单算法
  7. MTK:GPIO的配置与接口说明
  8. L2-013. 红色警报
  9. 190425每日一句
  10. 发那科程序全部输出_发那科CF卡程序输入输出方法
  11. 在使用btest中的demo中遇到 multiple definition of 的问题!
  12. 随便举个例子,说明单线程比多线程编程提高性能
  13. apollo(阿波罗) 分布式部署指南
  14. 范渊免职——网安界其人曾异军突起又将“落幕”?
  15. ​LeetCode刷题实战174:地下城游戏
  16. 大数据工程师学习路线,大数据培训后好就业吗?能拿多少钱?
  17. 电梯卡数据分析修改延期梯控
  18. IE浏览器对ArcMap和ArcGIS Pro的一些影响
  19. python中如何制作模块压缩包以及安装压缩包
  20. oracle加密 解密,oracle加密encrypt,解密decrypt

热门文章

  1. WordPress实现关注微信公众号回复关键字获取验证码查看网站隐藏内容
  2. dimm和udimm_服务器内存类型UDIMM、RDIMM和LRDIMM比较
  3. 语音控制Office
  4. LeetCode题解(0695):岛屿的最大面积(Python)
  5. ubuntu18.04+cuda9.0+lenovo y430p(GTX850M)亲测可用
  6. 解决Anaconda无法添加环境变量问题,适用于Linux的大多数发行版本。
  7. 基线_读心术基础(四) 什么是基线
  8. UART串口传图LCD显示----图像处理
  9. 用html5制作闹钟,HTM5制作的闹钟
  10. eclipse如何配置工作环境