java中获取日期属于哪一年的第几周

本文介绍了一种将具体日期转换为对应年份与周数的算法,解决了跨年问题,确保日期能准确归类到正确的年份及周次,适用于数据模型中使用年份加周数作为唯一索引的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在设计数据模型的时候需要用到年份+周数作为唯一索引,于是就需要判断一个日期是属于哪一年的第几周,本来问题很简单的,但是会涉及到跨年的问题,例如以周一作为一个星期的开始,那么2018-12-30日星期日,属于2018年的第52周,而2018-12-31日星期一,就属于2019年的第1周,因此,只用一个日期属于第几周来判断是会有问题的,下面这个方法里面返回了年份与第几周,可以满足要求。

public static Map<String,Integer> getWeekAndYear(String date) {
        Map<String,Integer> result =  new HashMap<String,Integer>();
        Calendar cal = Calendar.getInstance();

        --设置一周的开始,默认是周日,这里设置成星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat formatMon = new SimpleDateFormat("MM");
        SimpleDateFormat formatYear = new SimpleDateFormat("yyyy");
        Date d = null;
        try {
            d = format.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        cal.setTime(d);
        int month = Integer.valueOf(formatMon.format(d));
        int year = Integer.valueOf(formatYear.format(d));
        
        int week = cal.get(Calendar.WEEK_OF_YEAR);
        result.put("week", week);
        if(week == 1 && month == 12){
            result.put("year", year + 1);
        }else{

            result.put("year", year);
        }
        
        return result;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值