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

 更新时间:2024年06月22日 15:13:14   作者:globalcoding  
最近在工作中遇见一个小需求,要求计算两个日期之间相差几天,下面这篇文章主要给大家介绍了关于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计算日期相差天数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java基于mongodb实现分布式锁的示例代码

    java基于mongodb实现分布式锁的示例代码

    本文主要介绍了java基于mongodb实现分布式锁,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • java HashMap的keyset实例

    java HashMap的keyset实例

    简单地说,在keyset方法返回的set上做修改会改变原来hashmap,这也许不是你想要的,于是形成一个隐藏的bug
    2013-04-04
  • Java之Springcloud Feign组件详解

    Java之Springcloud Feign组件详解

    这篇文章主要介绍了Java之Springcloud Feign组件详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • springboot操作ldap全过程

    springboot操作ldap全过程

    这篇文章主要介绍了springboot操作ldap全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • springboot后端存储富文本内容的思路与步骤(含图片内容)

    springboot后端存储富文本内容的思路与步骤(含图片内容)

    在所有的编辑器中,大概最受欢迎的就是富文本编辑器和MarkDown编辑器了,下面这篇文章主要给大家介绍了关于springboot后端存储富文本内容的思路与步骤的相关资料,需要的朋友可以参考下
    2023-04-04
  • Java guava monitor监视器线程的使用详解

    Java guava monitor监视器线程的使用详解

    工作中的场景中是否存在类似这样的场景,需要提交的线程在某个触发条件下执行。本文主要就是使用guava中的monitor来优雅的实现带监视器的线程
    2021-11-11
  • 使用IDEA如何把Java程序打包成jar

    使用IDEA如何把Java程序打包成jar

    这篇文章主要介绍了使用IDEA把Java程序打包成jar,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java线程之锁对象Lock-同步问题更完美的处理方式代码实例

    Java线程之锁对象Lock-同步问题更完美的处理方式代码实例

    这篇文章主要介绍了Java线程之锁对象Lock-同步问题更完美的处理方式代码实例,还是挺不错的,这里分享给大家,需要的朋友可以参考。
    2017-11-11
  • spring mvc中的@PathVariable动态参数详解

    spring mvc中的@PathVariable动态参数详解

    这篇文章主要介绍了spring mvc中的@PathVariable动态参数详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • java递归菜单树转换成pojo对象

    java递归菜单树转换成pojo对象

    这篇文章介绍了java递归菜单树转换成pojo对象的具体实现,有需要的朋友可以参考一下
    2013-08-08

最新评论