java计算两个日期之间相差天数的4种方法详解

 更新时间:2023年09月04日 08:41:09   作者:是小李呀~  
这篇文章主要给大家介绍了关于java计算两个日期之间相差天数的4种方法,本文简短地介绍java中多种方式求两个日期的差量,文中通过代码介绍的非常详细,需要的朋友可以参考下

计算两个日期之间相差的天数的四种方法

第一种:时间戳的方式,计算两个日期的时间戳的差,再除当天的毫秒数即可得到相差的天数。

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");//结束时间
		        Long starTime=star.getTime();
		        Long endTime=endDay.getTime();
		        Long num=endTime-starTime;//时间戳相差的毫秒数
		        System.out.println("相差天数为:"+num/24/60/60/1000);//除以一天的毫秒数
		 } catch (ParseException e) {
		        e.printStackTrace();
		    }
	}

第二种:试用util包的Calendar类,每次增加一天,知道和结束时间相等的时候。

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();
	    }
	}

第三种:开始结束时间拆分为年月日,循环计算每年的天数和月日的天数,逻辑相加减。

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;
	}

第四种:以类的方式,计算给定日期到0001-01-01的总天数,再以两个日期的天数作差得到相差天数。

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"); 
		} 
	}

总结 

到此这篇关于java计算两个日期之间相差天数的4种方法的文章就介绍到这了,更多相关java计算日期之间相差天数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Socket类以及ServerSocket类的实例讲解

    基于Socket类以及ServerSocket类的实例讲解

    下面小编就为大家带来一篇基于Socket类以及ServerSocket类的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • spring boot拦截器的使用场景示例详解

    spring boot拦截器的使用场景示例详解

    这篇文章主要给大家介绍了关于spring boot拦截器的使用场景,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • mybatis向数据库里插入记录后自动返回记录ID问题

    mybatis向数据库里插入记录后自动返回记录ID问题

    本文介绍了在接手项目时,对一个业务处理逻辑进行重构和性能优化的经历,作者提到,性能问题可能是导致bug的一个重要原因,作者提到,在以前的.NET项目中,插入记录后系统会自动刷新实体类,为其中的主键ID赋值,而SpringBoot项目mybatis也可以通过指定主键来优化代码
    2025-01-01
  • MyBatis自定义映射关系和关联查询实现方法详解

    MyBatis自定义映射关系和关联查询实现方法详解

    这篇文章主要介绍了MyBatis自定义映射关系和关联查询实现方法,当POJO属性名与数据库列名不一致时,需要自定义实体类和结果集的映射关系,在MyBatis注解开发中,使用@Results定义并使用自定义映射,使用 @ResultMap使用自定义映射
    2023-04-04
  • Java超详细分析讲解final关键字的用法

    Java超详细分析讲解final关键字的用法

    关于final关键字,它也是我们一个经常用的关键字,可以修饰在类上、或者修饰在变量、方法上,以此看来定义它的一些不可变性!像我们经常使用的String类中,它便是final来修饰的类,并且它的字符数组也是被final所修饰的。但是一些final的一些细节你真的了解过吗
    2022-06-06
  • 解析使用jdbc,hibernate处理clob/blob字段的详解

    解析使用jdbc,hibernate处理clob/blob字段的详解

    本篇是对使用jdbc,hibernate处理clob/blob字段进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Java实现按比抽奖功能

    Java实现按比抽奖功能

    这篇文章主要为大家详细介绍了Java实现按比抽奖功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • idea2023远程调试springboot的过程详解

    idea2023远程调试springboot的过程详解

    这篇文章主要介绍了idea2023远程调试,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java 静态绑定与动态绑定深入分析

    Java 静态绑定与动态绑定深入分析

    这篇文章主要介绍了Java 静态绑定与动态绑定深入分析的相关资料,这里对java 的动态绑定和静态绑定做了详细的介绍,对其进行总结整理,需要的朋友可以参考下
    2016-11-11
  • MyBatis实战之动态生成SQL详解

    MyBatis实战之动态生成SQL详解

    这篇文章主要为大家详细介绍了如何使用MyBatis实现动态生成SQL,可以告别硬编码,拥抱智能SQL生成,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-07-07

最新评论