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计算日期相差天数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
相关文章
mybatis源码解读-Java中executor包的语句处理功能
这篇文章主要介绍了Java中executor包的语句处理功能,在mybatis映射文件中传参数,主要用到#{}或者${},下文围绕相关资料展开详细内容,需要的小伙伴可以参考一下2022-02-02SpringBoot整合Springsecurity实现数据库登录及权限控制功能
本教程详细介绍了如何使用SpringBoot整合SpringSecurity实现数据库登录和权限控制,本文分步骤结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧2024-10-10
最新评论