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

Java8使用LocalDate計(jì)算日期實(shí)例代碼解析

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

最近項(xiàng)目遇到一個(gè)需要計(jì)算兩個(gè)日期間隔的期限,需要計(jì)算出,整年整月整日這樣符合日常習(xí)慣的說(shuō)法,利用之前的Date和Calendar類會(huì)有點(diǎn)復(fù)雜,剛好項(xiàng)目使用了JDK8,那就利用起來(lái)這個(gè)新特性,上代碼:

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();	//開(kāi)始日期月份
		int start_day = startDate.getDayOfMonth();		//開(kāi)始日期天數(shù)
		int end_year = endDate.getYear();				//結(jié)束日期年份
		int end_month = endDate.getMonthValue();		//結(jié)束日期月份
		int end_day = endDate.getDayOfMonth();			//結(jié)束日期天數(shù)

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

		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 + "個(gè)月") + (d == 0 ? "" : d + "天");
	} catch (Exception e) {
		term = startTime + "-" + endTime;
		e.printStackTrace();
	}
	return term;
}

計(jì)算結(jié)果返回的內(nèi)容:

開(kāi)始時(shí)間:2019-11-30
結(jié)束時(shí)間:2020-04-30
時(shí)間間隔:5個(gè)月

開(kāi)始時(shí)間:2019-11-30
結(jié)束時(shí)間:2020-04-20
時(shí)間間隔:4個(gè)月20天

開(kāi)始時(shí)間:2019-11-30
結(jié)束時(shí)間:2020-11-30
時(shí)間間隔:1年

開(kāi)始時(shí)間:2019-11-30
結(jié)束時(shí)間:2020-02-23
時(shí)間間隔:2個(gè)月24天

開(kāi)始時(shí)間:2019-11-30
結(jié)束時(shí)間:2024-02-23
時(shí)間間隔:4年2個(gè)月24天

直接只用LocalDate API可能會(huì)出現(xiàn)不是預(yù)期的結(jié)果,比如開(kāi)始結(jié)束日期分別為2019-01-31,2019-04-30時(shí),直接用API計(jì)算月間隔為2,具體原因需要研究源碼,這里就不深究了,不過(guò)很多新特性用起來(lái)還是方便的,有機(jī)會(huì)再深入研究一下Java8時(shí)間類的用法。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中的Context你真的懂了嗎

    Spring中的Context你真的懂了嗎

    這篇文章主要給大家介紹了關(guān)于Spring中Context的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • spring的構(gòu)造函數(shù)注入屬性@ConstructorBinding用法

    spring的構(gòu)造函數(shù)注入屬性@ConstructorBinding用法

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

    Mybatis集成Spring的實(shí)例代碼_動(dòng)力節(jié)點(diǎn)Java 學(xué)院整理

    這篇文章主要介紹了Mybatis集成Spring的實(shí)例代碼,需要的朋友可以參考下
    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導(dǎo)出Excel方法詳解

    公共POI導(dǎo)出Excel方法詳解

    這篇文章主要介紹了公共POI導(dǎo)出Excel方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Java中的gateway自定義過(guò)濾器詳解

    Java中的gateway自定義過(guò)濾器詳解

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

    SpringBoot整合Redis管道的示例代碼

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

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

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

    通過(guò)代碼快速理解Java的三種代理模式

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

    Java連接服務(wù)器的兩種方式SFTP和FTP

    在項(xiàng)目開(kāi)發(fā)中,一般文件存儲(chǔ)很少再使用SFTP服務(wù),但是也不排除合作伙伴使用SFTP來(lái)存儲(chǔ)項(xiàng)目中的文件或者通過(guò)SFTP來(lái)實(shí)現(xiàn)文件數(shù)據(jù)的交互,這篇文章主要介紹了Java集成FTP與SFTP連接池
    2023-02-02

最新評(píng)論

扎兰屯市| 宜宾市| 射洪县| 吉首市| 肥东县| 双流县| 阿拉善盟| 驻马店市| 龙岩市| 肥乡县| 勃利县| 申扎县| 新和县| 浠水县| 青神县| 丹巴县| 龙陵县| 黔西县| 陇南市| 诸城市| 宁化县| 惠安县| 星子县| 东至县| 丰城市| 万荣县| 阿勒泰市| 延安市| 布尔津县| 吕梁市| 松原市| 健康| 前郭尔| 丹凤县| 堆龙德庆县| 河间市| 孝昌县| 灵寿县| 青海省| 津南区| 色达县|