Calendar 根据指定日期 获取月的第几周

问题:输入时间 输出XXXX年X月第X周(自然周)   

计算规则:周日在哪个月这周就属于哪个月 周日在当月的第几周 该周就是当月第几周 

 解决思路:1.计算传入日期所在周的星期日  2.计算周日属于几月第几周

    /**
     * 获取指定日期-XXXX年X月第X周
     * @param date
     * @return
     */
    public static String getWeeksInMonthOfDate(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        //设置每周第一天为周一 默认每周第一天为周日
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        //获取当前日期所在周周日
        calendar.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);
        return String.valueOf(calendar.get(Calendar.YEAR)).concat("年").
                concat(String.valueOf(calendar.get(Calendar.MONTH)+1)).concat("月第").
                concat(String.valueOf(calendar.get(Calendar.WEEK_OF_MONTH))).concat("周");
    }

1.获取传入时间所属周星期日 

使用calendar.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY); 这个赋值获取结果  跟
calendar.getFirstDayOfWeek() 的值有直接关系  

 getFirstDayOfWeek()表示一周第一天是周几 取值1--7  默认是周日取值是1

以上图9.22为例  9.22所在周是9.19-9.25  用calendar.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);赋值后 9.22获取当前所在周周日 结果为9.19

如果设置calendar.setFirstDayOfWeek(Calendar.MONDAY);一周第一天是周一

还以上图9.22为例 9.22所在周变为9.20-9.26 用calendar.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);赋值后 9.22获取当前所在周周日 结果为9.26 

注意:Calendar.SUNDAY的值始终是1  设置setFirstDayOfWeek(Calendar.MONDAY)一周开始日期是周一  不会影响Calendar.SUNDAY的取值

2.计算周日属于几月第几周

使用calendar.get(Calendar.WEEK_OF_MONTH)获取结果 跟calendar.getFirstDayOfWeek()和calendar.getMinimalDaysInFirstWeek()的取值有直接关系

getFirstDayOfWeek()前面已经说过了 下面看getMinimalDaysInFirstWeek()

getMinimalDaysInFirstWeek()默认值是1  用于确定年/月 交界处这周属于 上一年/上个月还是下一年/下个月 主要影响Calendar.WEEK_OF_MONTH和Calendar.WEEK_OF_YEAR的结果

以9.1为例 假设calendar.setFirstDayOfWeek(Calendar.MONDAY);一周第一天是周一   9.1所属周是8.30-9.5  9.1-9.5共有5天属于当前周  大于getMinimalDaysInFirstWeek()默认值1  则这周是9月的第一周  Calendar.WEEK_OF_MONTH返回1 

 如果设置setMinimalDaysInFirstWeek(6)  9.1所属周还是8.30-9.5  9.1-9.5共有5天属于当前周 不符合最小6天  则这周是8月第5周 Calendar.WEEK_OF_MONTH返回5

还以9.1为例看看calendar.getFirstDayOfWeek()和calendar.getMinimalDaysInFirstWeek()相互作用的效果

假如 getFirstDayOfWeek()取默认值 一周第一天是周日 则9.1所属周是8.29-9.4  当前周9.1-9.4共有4天属于当前周 若设置setMinimalDaysInFirstWeek(5) 不符合最小5天  则这周是8月第5周Calendar.WEEK_OF_MONTH返回5

保持setMinimalDaysInFirstWeek(5) 不变  修改calendar.setFirstDayOfWeek(Calendar.MONDAY);一周第一天是周一  9.1所属周变为8.30-9.5  9.1-9.5共有5天属于当前周 符合最小5天 则这周属于9月第一周  Calendar.WEEK_OF_MONTH返回1

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值