最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java計(jì)算日期相差天數(shù)的4種簡(jiǎn)單方法舉例

 更新時(shí)間:2024年06月22日 15:13:14   作者:globalcoding  
最近在工作中遇見(jiàn)一個(gè)小需求,要求計(jì)算兩個(gè)日期之間相差幾天,下面這篇文章主要給大家介紹了關(guān)于java計(jì)算日期相差天數(shù)的4種簡(jiǎn)單方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

方法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");//開(kāi)始時(shí)間
		        Date endDate = dateFormat.parse("2024-03-02 14:00:00");//結(jié)束時(shí)間
		        long msNum = endDate.getTime()-startDate.getTime();//時(shí)間戳相差的毫秒數(shù)
                long dayNum = msNum/(24*60*60*1000)//除以一天的毫秒數(shù),得到相差天數(shù)
		        System.out.println("相差天數(shù)為:"+ 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");//開(kāi)始時(shí)間
	        Date endDay=dft.parse("2025-03-02");//結(jié)束時(shí)間
	        Date nextDay=star;
	        int i=0;
	        while(nextDay.before(endDay)){//當(dāng)明天不在結(jié)束時(shí)間之前是終止循環(huán)
	        	Calendar cld = Calendar.getInstance();
	 	        cld.setTime(star);
	 	        cld.add(Calendar.DATE, 1);
	 	        star = cld.getTime();
	 	        //獲得下一天日期字符串
	 	        nextDay = star; 
	 	        i++;
	        }
	       System.out.println("相差天數(shù)為:"+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++){
				//計(jì)算是否是瑞年
				if(i%4==0&&i%100!=0||i%400==0){
					days+=366;
				}else{
					days+=365;
				}
			}
		}
		//得到開(kāi)始那一年已過(guò)去的日期
		int starday=days(star1[0],star1[1],star1[2]);
		//得到結(jié)束那一年已過(guò)去的日期
		int endday=days(end1[0],end1[1],end1[2]);
		//減去開(kāi)始那一年已過(guò)去的日期,加上結(jié)束那一年已過(guò)去的日期
		days=days-starday+endday;
		System.out.println("相差的天數(shù):"+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){//計(jì)算兩個(gè)日期之間的相距天數(shù)的成員方法 
		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("相差的天數(shù):"+d1.DiffDays(d2)); 
		}catch(Exception e){ 
			System.out.println("error"); 
		} 
	}

附:計(jì)算兩個(gè)日期相差天數(shù)(除去雙休日)

首先可以將問(wèn)題簡(jiǎn)化一下,可以知道,不論開(kāi)始、結(jié)束日期,只要經(jīng)過(guò)7天,必定就有兩天是周末。因此問(wèn)題可以簡(jiǎn)化為,一周內(nèi)的雙休日天數(shù)+周數(shù)*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;
    }

總結(jié) 

到此這篇關(guān)于java計(jì)算日期相差天數(shù)的4種簡(jiǎn)單方法舉例的文章就介紹到這了,更多相關(guān)java計(jì)算日期相差天數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Lombok快速上手(安裝、使用與注解參數(shù))

    詳解Lombok快速上手(安裝、使用與注解參數(shù))

    這篇文章主要介紹了詳解Lombok快速上手(安裝、使用與注解參數(shù)) ,這里整理了一些日常編碼中能遇到的所有關(guān)于它的使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • JAVA實(shí)現(xiàn)caesar凱撒加密算法

    JAVA實(shí)現(xiàn)caesar凱撒加密算法

    Carsar加密算法是最簡(jiǎn)單的加密算法,原理是把一個(gè)字母在字母表中移動(dòng)相應(yīng)的位置,比如輸入a,將其移動(dòng)3位,經(jīng)過(guò)Caesar加密后輸出的d,位置可以循環(huán)移動(dòng),輸入x,則輸出a
    2014-01-01
  • Java實(shí)現(xiàn)鼠標(biāo)拖拽移動(dòng)界面組件

    Java實(shí)現(xiàn)鼠標(biāo)拖拽移動(dòng)界面組件

    在Java中,F(xiàn)rame或者JFrame自身已經(jīng)實(shí)現(xiàn)了鼠標(biāo)拖拽標(biāo)題欄移動(dòng)窗口的功能。但是Jframe的樣式實(shí)在無(wú)法令人滿意,那你又該怎么實(shí)現(xiàn)鼠標(biāo)拖拽移動(dòng)窗口的目的呢?今天我們來(lái)探討下
    2014-09-09
  • 如何解決springboot讀取配置文件的中文亂碼問(wèn)題

    如何解決springboot讀取配置文件的中文亂碼問(wèn)題

    本篇文章主要介紹了如何解決springboot讀取配置文件的中文亂碼問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看
    2018-05-05
  • Stream流中的Map與flatMap的區(qū)別及說(shuō)明

    Stream流中的Map與flatMap的區(qū)別及說(shuō)明

    Map轉(zhuǎn)換單個(gè)元素為新值,保持流長(zhǎng)度;flatMap將元素轉(zhuǎn)換為流再合并,實(shí)現(xiàn)扁平化處理,兩者區(qū)別在于返回類(lèi)型(對(duì)象vs流)及是否改變?cè)財(cái)?shù)量,適用于不同數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換場(chǎng)景
    2025-09-09
  • 解決JavaWeb讀取本地json文件以及亂碼的問(wèn)題

    解決JavaWeb讀取本地json文件以及亂碼的問(wèn)題

    今天小編就為大家分享一篇解決JavaWeb讀取本地json文件以及亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Java實(shí)現(xiàn)List去重的幾種方法總結(jié)

    Java實(shí)現(xiàn)List去重的幾種方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Java中List去重的幾種常用方法總結(jié),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)和參考價(jià)值,需要的小伙伴可以了解一下
    2023-09-09
  • 詳解Java8?StreamAPI中的map()方法

    詳解Java8?StreamAPI中的map()方法

    Stream?API?是Java8中新加入的功能,這篇文章主要帶大家了解一下?Stream?API?中的?map()?方法的使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • Spring?Boot使用MyBatis進(jìn)行兩個(gè)表的關(guān)聯(lián)

    Spring?Boot使用MyBatis進(jìn)行兩個(gè)表的關(guān)聯(lián)

    本文主要介紹了Spring?Boot使用MyBatis進(jìn)行兩個(gè)表的關(guān)聯(lián),通過(guò)實(shí)例演示了如何使用MyBatis的XML映射文件和注解實(shí)現(xiàn)關(guān)聯(lián)操作,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java實(shí)現(xiàn)動(dòng)態(tài)獲取圖片驗(yàn)證碼的示例代碼

    Java實(shí)現(xiàn)動(dòng)態(tài)獲取圖片驗(yàn)證碼的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)動(dòng)態(tài)獲取圖片驗(yàn)證碼的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

栾川县| 博湖县| 黑水县| 永州市| 宁夏| 吴堡县| 南溪县| 天镇县| 巴东县| 马公市| 榆社县| 锦州市| 丹东市| 于都县| 信阳市| 子长县| 蒙自县| 麻城市| 德州市| 梅州市| 合山市| 南陵县| 麦盖提县| 巴南区| 浮山县| 疏勒县| 吴堡县| 江源县| 蓬安县| 溧阳市| 若羌县| 崇明县| 石泉县| 苏尼特右旗| 鹿泉市| 石狮市| 岳阳市| 蓬安县| 都江堰市| 根河市| 涟水县|