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

Java8使用LocalDate計算日期實例代碼解析

 更新時間:2020年04月07日 10:22:03   作者:Chsoul''S Blog  
這篇文章主要介紹了Java8使用LocalDate計算實例代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

最近項目遇到一個需要計算兩個日期間隔的期限,需要計算出,整年整月整日這樣符合日常習慣的說法,利用之前的Date和Calendar類會有點復雜,剛好項目使用了JDK8,那就利用起來這個新特性,上代碼:

public static String getTerm(String startTime, String endTime) {
	String term = "";
	if (startTime.length() != 8 || endTime.length() != 8) {
		return startTime + "-" + endTime;
	}
	try {
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
		LocalDate startDate = LocalDate.parse(startTime, formatter);
		LocalDate endDate = LocalDate.parse(endTime, formatter);
		int start_month = startDate.getMonthValue();	//開始日期月份
		int start_day = startDate.getDayOfMonth();		//開始日期天數
		int end_year = endDate.getYear();				//結束日期年份
		int end_month = endDate.getMonthValue();		//結束日期月份
		int end_day = endDate.getDayOfMonth();			//結束日期天數

		long y = ChronoUnit.YEARS.between(startDate, endDate);		//計算兩個日期間的年
		long m = ChronoUnit.MONTHS.between(startDate, endDate);		//計算兩個日期間的月
		long d = ChronoUnit.DAYS.between(startDate, endDate);		//計算兩個日期間的天

		int lastDayOfEndDate = endDate.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();//獲取日期月份的最后一天
		if (start_day == end_day || lastDayOfEndDate == end_day) {
			m = end_month - start_month;
			d = 0;
		} else if (end_day > start_day) {
			d = endDate.getDayOfMonth() - startDate.getDayOfMonth();
		} else {
			String tmpY = "";
			String tmpM = "";
			String tmpD = "";
			if(end_month == 1) {
				tmpY = String.valueOf(end_year-1);
				tmpM = String.valueOf(12);
				tmpD = String.valueOf(start_day);
			}else {
				tmpY = String.valueOf(end_year);
				if (end_month < 10) {
					tmpM = "0" + (end_month - 1);
				} else {
					tmpM = String.valueOf(end_month - 1);
				}
				tmpD = String.valueOf(start_day);
			}
			String tmpTime = tmpY + tmpM + tmpD;
			LocalDate tmpDate = LocalDate.parse(tmpTime, formatter);
			d = ChronoUnit.DAYS.between(tmpDate, endDate);
		}
		if (m >= 12) {
			m = m - y * 12;
		}
		term = (y == 0 ? "" : y + "年") + (m == 0 ? "" : +m + "個月") + (d == 0 ? "" : d + "天");
	} catch (Exception e) {
		term = startTime + "-" + endTime;
		e.printStackTrace();
	}
	return term;
}

計算結果返回的內容:

開始時間:2019-11-30
結束時間:2020-04-30
時間間隔:5個月

開始時間:2019-11-30
結束時間:2020-04-20
時間間隔:4個月20天

開始時間:2019-11-30
結束時間:2020-11-30
時間間隔:1年

開始時間:2019-11-30
結束時間:2020-02-23
時間間隔:2個月24天

開始時間:2019-11-30
結束時間:2024-02-23
時間間隔:4年2個月24天

直接只用LocalDate API可能會出現不是預期的結果,比如開始結束日期分別為2019-01-31,2019-04-30時,直接用API計算月間隔為2,具體原因需要研究源碼,這里就不深究了,不過很多新特性用起來還是方便的,有機會再深入研究一下Java8時間類的用法。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Spring中的Context你真的懂了嗎

    Spring中的Context你真的懂了嗎

    這篇文章主要給大家介紹了關于Spring中Context的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • spring的構造函數注入屬性@ConstructorBinding用法

    spring的構造函數注入屬性@ConstructorBinding用法

    這篇文章主要介紹了關于spring的構造函數注入屬性@ConstructorBinding用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Mybatis集成Spring的實例代碼_動力節(jié)點Java 學院整理

    Mybatis集成Spring的實例代碼_動力節(jié)點Java 學院整理

    這篇文章主要介紹了Mybatis集成Spring的實例代碼,需要的朋友可以參考下
    2017-09-09
  • JDK 5 提供的注解:Target、Inherited和Documented的區(qū)別

    JDK 5 提供的注解:Target、Inherited和Documented的區(qū)別

    這篇文章主要介紹了JDK 5 提供的注解:Target、Inherited和Documented的區(qū)別,需要的朋友可以參考下
    2016-02-02
  • 公共POI導出Excel方法詳解

    公共POI導出Excel方法詳解

    這篇文章主要介紹了公共POI導出Excel方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Java中的gateway自定義過濾器詳解

    Java中的gateway自定義過濾器詳解

    這篇文章主要介紹了Java中的gateway自定義過濾器詳解,過濾器是指gateway在路由過程中(A地址路由到B地址)生效進行過濾操作的,所有首先你得先配一個地址路由,本文提供了部分實現代碼,需要的朋友可以參考下
    2023-11-11
  • SpringBoot整合Redis管道的示例代碼

    SpringBoot整合Redis管道的示例代碼

    本文將結合實例代碼,介紹SpringBoot整合Redis管道,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • Java多線程atomic包介紹及使用方法

    Java多線程atomic包介紹及使用方法

    這篇文章主要介紹了Java多線程atomic包介紹及使用方法,涉及原子更新基本類型介紹及代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 通過代碼快速理解Java的三種代理模式

    通過代碼快速理解Java的三種代理模式

    這篇文章主要介紹了通過代碼快速理解Java的三種代理模式,代理(Proxy)是一種設計模式,提供了對目標對象另外的訪問方式,即通過代理對象訪問目標對象。,需要的朋友可以參考下
    2019-06-06
  • Java連接服務器的兩種方式SFTP和FTP

    Java連接服務器的兩種方式SFTP和FTP

    在項目開發(fā)中,一般文件存儲很少再使用SFTP服務,但是也不排除合作伙伴使用SFTP來存儲項目中的文件或者通過SFTP來實現文件數據的交互,這篇文章主要介紹了Java集成FTP與SFTP連接池
    2023-02-02

最新評論

白朗县| 大连市| 宁安市| 泽普县| 裕民县| 漳平市| 开阳县| 探索| 新乐市| 耒阳市| 武宣县| 墨竹工卡县| 光山县| 江山市| 安陆市| 潍坊市| 孝义市| 云龙县| 玉环县| 黄山市| 华安县| 重庆市| 高安市| 鄂托克前旗| 邹平县| 孟连| 嵊泗县| 老河口市| 新乐市| 巨鹿县| 百色市| 电白县| 易门县| 仁怀市| 衡山县| 玉林市| 忻城县| 绍兴市| 九江县| 长兴县| 西盟|