java获取当前日期属于的年份与周度,解决跨年问题

需求:根据当前的日期可以判断属于第几个周度,哪一年,并兼容跨年问题

逻辑:周一作为一周的开始,新一年1号所在的周,从1号往后数至少有4天属于新一年则将周计算为新一年的第一周,如2019年12月30号属于2020年的第一周

上代码:

package org.test.unittest.DATETest;

import com.alibaba.fastjson.JSON;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class DATATEST {

    /**
     * 根据当前日期,返回当前日期,年份,周度
     */
    
    public static List GetWeekYearNo(String day) throws ParseException{
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setMinimalDaysInFirstWeek(4);
        calendar.setTime(dateFormat.parse(day));
        List<Object> list = new ArrayList<>();
        int weekOfYear = calendar.get(Calendar.YEAR);
        int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);
        int nowmonth = calendar.get(Calendar.MONTH) +1; //Calendar获取月份需要+1
        //正常12月份肯定都是大月份的周数如53 52 51 50 49 如果周数是1而月份是12,则表示日期被计算在了下一年 年份需要 +1
        if(weekNo==1 && nowmonth==12){
            weekOfYear = weekOfYear + 1;
        }
        //1月份肯定都是小周数如1,2,3,4,5 如果周数是52 或者53 而月份是1 则表示日期被计算在了上一年,年份需要-1
        if((weekNo==53 || weekNo==52)  && nowmonth==1){
            weekOfYear = weekOfYear - 1;
        }
         list.add(day);
        list.add(weekOfYear);
         list.add(weekNo);

        return list;
    }




    public static void main(String[] args) throws Exception{
        String day1 = "2018-12-30 23:59:59";
        String day2 = "2018-12-31 00:00:00";
        String day3 = "2019-01-06 23:59:59";
        String day4 = "2019-12-29 23:59:59";
        String day5 = "2019-12-30 00:00:00";
        String day6 = "2020-01-05 23:59:59";
        String day7 = "2020-12-27 23:59:59";
        String day8 = "2020-12-28 00:00:00";
        String day9 = "2021-01-03 23:59:59";
        String day10 = "2021-12-26 23:59:59";
        String day11 = "2021-12-27 00:00:00";
        String day12 = "2022-01-02 23:59:59";
        String day13 = "2022-01-03 00:00:00";
        String day14 = "2022-01-10 00:00:00";
        String day15 = "2022-12-25 23:59:59";
        String day16 = "2022-12-26 00:00:00";
        String day17 = "2023-01-01 23:59:59";
        String day18 = "2023-01-02 00:00:00";
        String day19 = "2023-12-24 23:59:59";
        String day20 = "2023-12-25 00:00:00";
        String day21 = "2023-12-31 23:59:59";
        String day22 = "2024-01-01 00:00:00";
        String day23 = "2024-12-29 23:59:59";
        String day24 = "2024-12-30 00:00:00";
        String day25 = "2025-01-05 23:59:59";
        String day26 = "2025-12-28 23:59:59";
        String day27 = "2025-12-29 00:00:00";
        String day28 = "2026-01-04 23:59:59";
        System.out.println("      当前日期     ,    年  ,周度");

        System.out.println(JSON.toJSONString(GetWeekYearNo(day1)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day2)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day3)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day4)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day5)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day6)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day7)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day8)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day9)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day10)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day11)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day12)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day13)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day14)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day15)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day16)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day17)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day18)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day19)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day20)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day21)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day22)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day23)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day24)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day25)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day26)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day27)));
        System.out.println(JSON.toJSONString(GetWeekYearNo(day28)));




    }
}

 

运行结果:

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值