Calendar类经常使用的场景

本文介绍了一系列实用的日期操作方法,包括计算两个日期之间的天数、获取指定天数后的日期、计算某个月的最大天数、确定某一天是一年或一月中的第几周、找出一年中特定周的第一天以及向前或向后推算日期。

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

参考博客:https://blog.youkuaiyun.com/tiantangdizhibuxiang/article/details/77429346

使用场景

1、计算两个任意时间中间相隔的天数

这个使用场景较多,如查询某个时间段注册的新用户,或者某个时间段内销售总额等等。

public int getDaysBetween (Calendar day1, Calendar day2){  
            if (day1.after(day2)){  
                Calendar swap = day1;  
                day1 = day2;  
                day2 = swap;  
            }  
            int days = day2.get(Calendar.DAY_OF_YEAR) - day1.get(Calendar.DAY_OF_YEAR);  
            int y2 = day2.get(Calendar.YEAR);  
            if (day1.get(Calendar.YEAR) != y2){  
                day1 = (Calendar) day1.clone();  
                do{  
                    days += day1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数  
                    day1.add(Calendar.YEAR, 1);  
                } while (day1.get(Calendar.YEAR) != y2);  
            }  
            return days;  
        }  
     @Test  
     public void getDaysBetweenTest(){  
         Calendar calendar1=Calendar.getInstance();   
         Calendar calendar2=Calendar.getInstance();   
         calendar1.set(2017,07,30);  
         calendar2.set(2017,07,03);  
         int days=getDaysBetween(calendar1, calendar2);  
         System.out.println("相隔"+days+"天");  
     }  
2、获取今天或者之后多少天的日期
Calendar calendar=Calendar.getInstance();     
      
    @Test  
    public void getTest(){  
        calendar.setTime(new Date());  
        /*获取今天的日期*/  
        System.out.println("今天的日期是:"+calendar.get(Calendar.DAY_OF_MONTH));  
        /*获取十天之后的日期*/  
        calendar.clear();//避免继承当前系统的时间  
        calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH)+10);  
        System.out.println("十天之后的日期是:"+calendar.get(Calendar.DAY_OF_MONTH));  
    }  
3、计算某个月的天数是多少
/*计算某一个月的天数是多少*/  
    public void maxDay(int year,int month){  
        calendar.clear();  
        calendar.set(Calendar.YEAR, year);  
        calendar.set(Calendar.MONTH,month-1);//默认1月为0月  
        int day = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);  
        System.out.println(year+"年"+month+"月"+"的最大天数是:"+day);  
    }  
    @Test  
    public void maxDayTest(){  
        maxDay(2017,9);  
    } 
4、计算某一天是该年或该月的第几个星期
public void weekNum(int year,int month,int day){  
        calendar.clear();  
        calendar.set(Calendar.YEAR, year);  
        calendar.set(Calendar.MONTH,month-1);  
        calendar.set(Calendar.DAY_OF_MONTH, day);  
        /*计算某一天是该年的第几个星期*/  
        int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);  
        System.out.println(year+"年"+month+"月"+day+"日是这年中的第"+weekOfYear+"个星期");  
        /*计算某一天是该月的第几个星期*/  
        int weekOfMonth= calendar.get(Calendar.WEEK_OF_MONTH);  
        System.out.println(year+"年"+month+"月"+day+"日是这个月中的第"+weekOfMonth+"个星期");  
    }  
    @Test  
    public void weekNumTest(){  
        weekNum(2017, 7, 8);  
    }  
5、计算一年中的第几星期是几号
public void dayNum(int year,int week){  
    calendar.clear();  
    SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");  
    calendar.set(Calendar.YEAR, year);  
    calendar.set(Calendar.WEEK_OF_YEAR, week);  
    calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);  
    System.out.println(df.format(calendar.getTime()));  
}  
  
@Test  
public void dayNumTest(){  
    dayNum(2017,28);  
}  
6、查询显示当前的后几天,前几天等
public void add(int year,int month,int day,int num){  
        calendar.clear();  
        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");  
        calendar.set(Calendar.YEAR, year);  
        calendar.set(Calendar.MONTH, month-1);  
        calendar.set(Calendar.DAY_OF_MONTH, day);  
        Date date=calendar.getTime();  
        calendar.add(Calendar.DATE, num);  
        date=calendar.getTime();  
        System.out.println(df.format(date));  
    }  
    /*使用场景比如,发找回密码邮件,设置一天后过期*/  
    @Test  
    public void addTest(){  
        add(2017,7,10,1);  
    }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值