java8 LocalDate LocalDateTime等時(shí)間類用法實(shí)例分析
本文實(shí)例講述了java8 LocalDate LocalDateTime等時(shí)間類用法。分享給大家供大家參考,具體如下:
這篇文章主要是java8中新的Date和Time API的實(shí)戰(zhàn)。新的Date和Time類是Java開發(fā)者社區(qū)千呼萬(wàn)喚始出來(lái)的。Java8 之前存在的Date類一直都受人詬病,很多人都會(huì)選擇使用第三方的date庫(kù)joda-time。Java8中的date和time api是jodatime的作者參與開發(fā)的,實(shí)現(xiàn)了JSR310的全部?jī)?nèi)容。這些新的api都在包java.time下。
既然第三方的joda-time,date4j都已經(jīng)足夠強(qiáng)大了,為什么java8還要重新實(shí)現(xiàn)他呢,一部分的原因是這些第三方的庫(kù)是存在兼容問(wèn)題的,比如標(biāo)準(zhǔn)的JSF日期轉(zhuǎn)化器與joda-time api,就不兼容,每次使用都需要編寫自己的轉(zhuǎn)換器,所以標(biāo)準(zhǔn)化api是必須的,就有了JSR310,java8中就實(shí)現(xiàn)了他全部的規(guī)定內(nèi)容。
新Date類和Time類背后的設(shè)計(jì)原則:
不可變類
java8之前,Date類都是可變類。當(dāng)我們?cè)诙嗑€程環(huán)境下使用它,編程人員應(yīng)該確認(rèn)Date對(duì)象的線程安全。Java8的Date和Time API提供了線程安全的不可變類。編程人員不用考慮并發(fā)的問(wèn)題。
領(lǐng)域模型驅(qū)動(dòng)設(shè)計(jì)方法
新的日期和時(shí)間的類別遵循“域驅(qū)動(dòng)設(shè)計(jì)”。對(duì)于開發(fā)者來(lái)說(shuō),理解方法和類的功能是很容易的。
java.time.LocalDate:
LocalDate只提供日期不提供時(shí)間信息。它是不可變類且線程安全的。
package org.smarttechie;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
/**
* This class demonstrates JAVA 8 data and time API
* @author Siva Prasad Rao Janapati
* */
public class DateTimeDemonstration {
/**
* @param args
*/
public static void main(String[] args) {
//Create date
LocalDate localDate = LocalDate.now();
System.out.println("The local date is :: " + localDate);
//Find the length of the month. That is, how many days are there for this month.
System.out.println("The number of days available for this month:: " + localDate.lengthOfMonth());
//Know the month name
System.out.println("What is the month name? :: " + localDate.getMonth().name());
//add 2 days to the today's date.
System.out.println(localDate.plus(2, ChronoUnit.DAYS));
//substract 2 days from today
System.out.println(localDate.minus(2, ChronoUnit.DAYS));
//Convert the string to date
System.out.println(localDate.parse("2017-04-07"));
}
}
運(yùn)行結(jié)果:

java.time.LocalTime:
LocalTime只提供時(shí)間而不提供日期信息,它是不可變類且線程安全的。
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
/**
* This class demonstrates JAVA 8 data and time API
* @author Siva Prasad Rao Janapati
* */
public class DateTimeDemonstration {
/**
* @param args
*/
public static void main(String[] args) {
//Get local time
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
//Get the hour of the day
System.out.println("The hour of the day:: " + localTime.getHour());
//add 2 hours to the time.
System.out.println(localTime.plus(2, ChronoUnit.HOURS));
//add 6 minutes to the time.
System.out.println(localTime.plusMinutes(6));
//substract 2 hours from current time
System.out.println(localTime.minus(2, ChronoUnit.HOURS));
}
}
運(yùn)行結(jié)果:

java.time.LocalDateTime:
LocalDateTime提供時(shí)間和日期的信息,它是不可變類且線程安全的
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
/**
* This class demonstrates JAVA 8 data and time API
* @author Siva Prasad Rao Janapati
*
*/
public class DateTimeDemonstration {
/**
* @param args
*/
public static void main(String[] args) {
//Get LocalDateTime object
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
//Find the length of month. That is, how many days are there for this month.
System.out.println("The number of days available for this month:: " + localDateTime.getMonth().length(true));
//Know the month name
System.out.println("What is the month name? :: " + localDateTime.getMonth().name());
//add 2 days to today's date.
System.out.println(localDateTime.plus(2, ChronoUnit.DAYS));
//substract 2 days from today
System.out.println(localDateTime.minus(2, ChronoUnit.DAYS));
}
}
運(yùn)行結(jié)果:

java.time.Year:
Year提供年的信息,它是不可變類且線程安全的。
import java.time.Year;
import java.time.temporal.ChronoUnit;
/**
* This class demonstrates JAVA 8 data and time API
* @author Siva Prasad Rao Janapati
*
*/
public class DateTimeDemonstration {
/**
* @param args
*/
public static void main(String[] args) {
//Get year
Year year = Year.now();
System.out.println("Year ::" + year);
//know the year is leap year or not
System.out.println("Is year[" +year+"] leap year?"+ year.isLeap());
}
}
運(yùn)行結(jié)果:

java.time.Duration:
Duration是用來(lái)計(jì)算兩個(gè)給定的日期之間包含多少秒,多少毫秒,它是不可變類且線程安全的
java.time.Period:
Period是用來(lái)計(jì)算兩個(gè)給定的日期之間包含多少天,多少月或者多少年,它是不可變類且線程安全的
import java.time.LocalDate;
import java.time.Period;
import java.time.temporal.ChronoUnit;
/**
* This class demonstrates JAVA 8 data and time API
* @author Siva Prasad Rao Janapati
*
*/
public class DateTimeDemonstration {
/**
* @param args
*/
public static void main(String[] args) {
LocalDate localDate = LocalDate.now();
Period period = Period.between(localDate, localDate.plus(2, ChronoUnit.DAYS));
System.out.println(period.getDays());
}
}
運(yùn)行結(jié)果:

PS:這里再為大家推薦幾款時(shí)間及日期相關(guān)工具供大家參考使用:
在線日期/天數(shù)計(jì)算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi
在線日期計(jì)算器/相差天數(shù)計(jì)算器:
http://tools.jb51.net/jisuanqi/datecalc
在線日期天數(shù)差計(jì)算器:
http://tools.jb51.net/jisuanqi/onlinedatejsq
Unix時(shí)間戳(timestamp)轉(zhuǎn)換工具:
http://tools.jb51.net/code/unixtime
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
一文徹底吃透SpringMVC中的轉(zhuǎn)發(fā)和重定向
大家應(yīng)該都知道springmvc本來(lái)就會(huì)把返回的字符串作為視圖名解析,然后轉(zhuǎn)發(fā)到對(duì)應(yīng)的視圖,這篇文章主要給大家介紹了關(guān)于SpringMVC中轉(zhuǎn)發(fā)和重定向的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
SpringMVC通過(guò)模型視圖ModelAndView渲染視圖的實(shí)現(xiàn)
這篇文章主要介紹了SpringMVC通過(guò)模型視圖ModelAndView渲染視圖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Spring boot實(shí)現(xiàn)熱部署的兩種方式詳解
這篇文章主要介紹了Spring boot實(shí)現(xiàn)熱部署的兩種方式,這兩種方法分別是使用 Spring Loaded和使用spring-boot-devtools進(jìn)行熱部署,文中給出了詳細(xì)示例代碼和介紹,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。2017-04-04
Springboot 如何指定獲取自己寫的配置properties文件的值
這篇文章主要介紹了Springboot 如何指定獲取自己寫的配置properties文件的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Spring Data Envers支持有條件變動(dòng)紀(jì)錄的保存和查詢的方法
通過(guò)spring-data-envers可以很容易的實(shí)現(xiàn)數(shù)據(jù)變動(dòng)紀(jì)錄的保存和查詢,本文介紹支持有條件變動(dòng)紀(jì)錄的保存和查詢的方法,通過(guò)spring-data-envers很容易的實(shí)現(xiàn)變動(dòng)紀(jì)錄的保存和查詢,只需要增加幾個(gè)注解就可以,感興趣的朋友跟隨小編一起看看吧2023-10-10
JavaWeb項(xiàng)目實(shí)現(xiàn)文件上傳動(dòng)態(tài)顯示進(jìn)度實(shí)例
本篇文章主要介紹了JavaWeb項(xiàng)目實(shí)現(xiàn)文件上傳動(dòng)態(tài)顯示進(jìn)度實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04
Spring Boot Admin 環(huán)境搭建與基本使用詳解
這篇文章主要介紹了Spring Boot Admin 環(huán)境搭建與基本使用,本文主要是對(duì)于Spring Boot Admin的基本認(rèn)識(shí)和基本運(yùn)用,通過(guò)本篇博客能夠?qū)pring Boot Admin有一個(gè)宏觀認(rèn)知和能夠快速上手,需要的朋友可以參考下2023-08-08
Java?SSM實(shí)現(xiàn)前后端協(xié)議聯(lián)調(diào)詳解下篇
首先我們已經(jīng)知道,在現(xiàn)在流行的“前后端完全分離”架構(gòu)中,前后端聯(lián)調(diào)是一個(gè)不可能避免的問(wèn)題,這篇文章主要介紹了Java?SSM實(shí)現(xiàn)前后端協(xié)議聯(lián)調(diào)過(guò)程2022-08-08

