java计算日期相差天数的4种简单方法举例

最近在工作中遇见一个小需求,要求计算两个日期之间相差几天,下面这篇文章主要给大家介绍了关于java计算日期相差天数的4种简单方法,文中通过代码介绍的非常详细,需要的朋友可以参考下

方法1:long值相减(推荐)

public static void main(String[] args) {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         try {
                Date startDate = dateFormat.parse("2024-03-01 10:00:00");//开始时间
                Date endDate = dateFormat.parse("2024-03-02 14:00:00");//结束时间
                long msNum = endDate.getTime()-startDate.getTime();//时间戳相差的毫秒数
                long dayNum = msNum/(24*60*60*1000)//除以一天的毫秒数,得到相差天数
                System.out.println("相差天数为:"+ dayNum);
         } catch (ParseException e) {
                e.printStackTrace();
         }
}

方法2:

public static void main(String[] args) {
        DateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date star = dft.parse("2020-02-03");//开始时间
            Date endDay=dft.parse("2025-03-02");//结束时间
            Date nextDay=star;
            int i=0;
            while(nextDay.before(endDay)){//当明天不在结束时间之前是终止循环
                Calendar cld = Calendar.getInstance();
                cld.setTime(star);
                cld.add(Calendar.DATE, 1);
                star = cld.getTime();
                //获得下一天日期字符串
                nextDay = star; 
                i++;
            }
           System.out.println("相差天数为:"+i);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

方法3:

public static void main(String[] args) {
        String star="2020-02-03";
        String end="2025-03-02";
        String[] star1=star.split("-");
        String[] end1=end.split("-");
        int days=0;
        if(Integer.parseInt(star1[0])<Integer.parseInt(end1[0])){
            for(int i=Integer.parseInt(star1[0]);i<Integer.parseInt(end1[0]);i++){
                //计算是否是瑞年
                if(i%4==0&&i%100!=0||i%400==0){
                    days+=366;
                }else{
                    days+=365;
                }
            }
        }
        //得到开始那一年已过去的日期
        int starday=days(star1[0],star1[1],star1[2]);
        //得到结束那一年已过去的日期
        int endday=days(end1[0],end1[1],end1[2]);
        //减去开始那一年已过去的日期,加上结束那一年已过去的日期
        days=days-starday+endday;
        System.out.println("相差的天数:"+days);
    }
    public static int days(String year,String month,String day){
        int days=0;
        int nowyear=Integer.parseInt(year);
        int[] monthday={0,31,28,31,30,31,30,31,31,30,31,30,31};
        int[] monthday1={0,31,29,31,30,31,30,31,31,30,31,30,31};
        boolean flag=true;
        if(nowyear%4==0&&nowyear%100!=0||nowyear%400==0){
        }else{
            flag=false;
        }
        for(int i=0;i<Integer.parseInt(month);i++){
            if(flag){
                days+=monthday1[i];
            }else{
                days+=monthday[i];
            }
        }
        days+=Integer.parseInt(day);
        return days;
    }

方法4:

int y;
    int m;
    int d;
 
    public test2(int y,int m,int d ){
        this.y=y;
        this.m=m;
        this.d=d;
    }
    public int sum(test2 d){
        int day=0;
        int[] x={0,31,28,31,30,31,30,31,31,30,31,30,31};
        for(int i=1;i<d.y;i++){
            if(i%4==0&& i%100!=0 || i%400==0){
                day+=366;
            }else{
                day+=365;
            }
        }
        if(d.y%4==0&& d.y%100!=0 || d.y%400==0){
            x[2]=29;
        }
        for(int i=1;i<d.m;i++){
 
            day+=x[i];  
        }
        day+=d.d;
        System.out.println(day);
        return day;
 
    }
    public int DiffDays(test2 d){//计算两个日期之间的相距天数的成员方法 
        int s1=sum(this);
        int s2=sum(d);
        if(s1>s2){
            return s1-s2;
        }else{
            return s2-s1;
        }
    }
    public static void main(String args[]){ 
        int a,b,c; 
        test2 d1,d2; 
        try{ 
            d1=new test2(2020,02,03); 
            d2=new test2(2025,03,02); 
            System.out.println("相差的天数:"+d1.DiffDays(d2)); 
        }catch(Exception e){ 
            System.out.println("error"); 
        } 
    }

附:计算两个日期相差天数(除去双休日)
首先可以将问题简化一下,可以知道,不论开始、结束日期,只要经过7天,必定就有两天是周末。因此问题可以简化为,一周内的双休日天数+周数*2.

public int checkWeekendDay(int startDate, int endDate, int days){
        int weekEndCount = 0;
        if (days<1){
            if (startDate==6 || startDate==0){
                weekEndCount+=1;
            }
        } else {
            weekEndCount+=(days/7)*2;
            weekEndCount+=calculateWeekendDays(startDate,endDate);
        }
 
        return weekEndCount;
    }
 
public int calculateWeekendDays(int startDate, int endDate){
        int weekendCount=0;
        if (startDate==0&&endDate==6) {
            weekendCount += 2;
        }else if (startDate<endDate&&endDate==6){
            weekendCount+=1;
        }else if (startDate<endDate&&startDate==0){
            weekendCount+=1;
        }else if (startDate>endDate){
            weekendCount+=2;
        }
        if (startDate==endDate){
            if (startDate==6||endDate==0){
                weekendCount+=1;
            }
        }
 
        return weekendCount;
    }

总结
到此这篇关于java计算日期相差天数的4种简单方法举例的文章就介绍到这了,更多相关java计算日期相差天数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持vb.net教程C#教程python教程SQL教程access 2010教程xin3721自学网

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值