使用Calendar类获取指定日期所在年/月份、周第一天、最后一天

        最近做项目有涉及需要获取指定日期或当前日期所在月份和周第一和最后一天,结合网上的资料和自己项目开发记录,记录下用到的这些方法。

目录

1.获取指定年份的第一天和最后一天

2. 获取指定日期月份第一天和最后一天

3.获取指定日期所在周的周一和周日 

4.获取昨天、明天、及前N天、后N天


1.获取指定年份的第一天和最后一天

/**
 * 获取指定年份的第一天和最后一天
 *
 **/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendarMonth =Calendar.getInstance();
calendarMonth.setTime(new Date());  //修改成需要的日期
calendarMonth.add(Calendar.YEAR, 0);   // -1表示去年,0表示今年,1表示明年月,上下年份以此类型
calendarMonth.set(Calendar.DAY_OF_YEAR, calendarMonth.getActualMinimum(Calendar.DAY_OF_YEAR));
System.out.println(">>>> 第一天" + sdf.format(calendarMonth.getTime()));
calendarMonth.set(Calendar.DAY_OF_YEAR, calendarMonth.getActualMaximum(Calendar.DAY_OF_YEAR));
System.out.println(">>>> 最后一天 " + sdf.format(calendarMonth.getTime()));

2. 获取指定日期月份第一天和最后一天

        /**
         * 获取日期所在月度的第一天和最后一天
         */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendarMonth =Calendar.getInstance();
        calendarMonth.setTime(new Date());  //修改成需要的日期
        calendarMonth.add(Calendar.MONTH, 0);   // -1表示上个月,0表示本月,1表示下个月,上下月份以此类型
        calendarMonth.set(Calendar.DAY_OF_MONTH, calendarMonth.getActualMinimum(Calendar.DAY_OF_MONTH));
        System.out.println("上月第一天:" + sdf.format(calendarMonth.getTime()));
        calendarMonth.set(Calendar.DAY_OF_MONTH, calendarMonth.getActualMaximum(Calendar.DAY_OF_MONTH));
        System.out.println("上月最后一天:" + sdf.format(calendarMonth.getTime()));

calendarMonth.add(Calendar.MONTH, 0);   // -1表示上个月,0表示本月,1表示下个月,上下月份以此类型

3.获取指定日期所在周的周一和周日 

        /**
         * 获取日期所在周的第一天和最后一天
         */
        Calendar calendarWeek =Calendar.getInstance();
        calendarWeek.setTime(new Date());
        calendarWeek.add(Calendar.DATE, 0 * 7);    // 0 表示当前周,-1 表示上周,1 表示下周,以此类推
        calendarWeek.setFirstDayOfWeek(Calendar.MONDAY); //以周一为首日
        calendarWeek.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        System.out.println("日期所在周第一天:" + sdf.format(calendarWeek.getTime()));
        calendarWeek.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("日期所在周最一天:" + sdf.format(calendarWeek.getTime()));

calendarWeek.add(Calendar.DATE, 0 * 7);    // 0 表示当前周,-1 表示上周,1 表示下周,以此类推

4.获取昨天、明天、及前N天、后N天

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse("2021-02-02");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);   //改成你要获取的那个月份里面的任意一天

        //获取指定时间所在月份的第一天
        calendar.add(Calendar.DATE,-1);     //-1 表示往前一天,往前N天,只需把 -1 改成你要的天数
        System.out.println("获取昨天:" + sdf.format(calendar.getTime()));

        //获取指定时间所在月份的最后一天
        calendar.add(Calendar.DATE,1);      //1 表示往后一天,往后N天,只需把 1 改成你要的天数
        System.out.println("获取明天:" + sdf.format(calendar.getTime()));

注意 calendar.add(Calendar.DATE,-1);  这行代码,-1表示往前一天,1 表示往后一天,往前/后 N 天 只需要把 -1/1 改成你要的天数即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值