java8 LocalDate LocalDateTime等時(shí)間類用法實(shí)例分析
本文實(shí)例講述了java8 LocalDate LocalDateTime等時(shí)間類用法。分享給大家供大家參考,具體如下:
這篇文章主要是java8中新的Date和Time API的實(shí)戰(zhàn)。新的Date和Time類是Java開發(fā)者社區(qū)千呼萬喚始出來的。Java8 之前存在的Date類一直都受人詬病,很多人都會選擇使用第三方的date庫joda-time。Java8中的date和time api是jodatime的作者參與開發(fā)的,實(shí)現(xiàn)了JSR310的全部內(nèi)容。這些新的api都在包java.time下。
既然第三方的joda-time,date4j都已經(jīng)足夠強(qiáng)大了,為什么java8還要重新實(shí)現(xià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)我們在多線程環(huán)境下使用它,編程人員應(yīng)該確認(rèn)Date對象的線程安全。Java8的Date和Time API提供了線程安全的不可變類。編程人員不用考慮并發(fā)的問題。
領(lǐng)域模型驅(qū)動設(shè)計(jì)方法
新的日期和時(shí)間的類別遵循“域驅(qū)動設(shè)計(jì)”。對于開發(fā)者來說,理解方法和類的功能是很容易的。
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是用來計(jì)算兩個給定的日期之間包含多少秒,多少毫秒,它是不可變類且線程安全的
java.time.Period:
Period是用來計(jì)算兩個給定的日期之間包含多少天,多少月或者多少年,它是不可變類且線程安全的
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
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
spring-shiro權(quán)限控制realm實(shí)戰(zhàn)教程
這篇文章主要介紹了spring-shiro權(quán)限控制realm實(shí)戰(zhàn)教程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java用Arrays.asList初始化ArrayList實(shí)例方法
在本篇文章里小編給大家分享的是關(guān)于Java中使用Arrays.asList初始化ArrayList的知識點(diǎn)內(nèi)容,需要的朋友們參考下。2019-10-10深入理解Java線程池從設(shè)計(jì)思想到源碼解讀
這篇文章主要介紹了深入理解Java線程池從設(shè)計(jì)思想到源碼解讀,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Java異常繼承結(jié)構(gòu)解析_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java異常繼承結(jié)構(gòu)解析的相關(guān)知識,需要的朋友可以參考下2017-04-04淺談SpringSecurity注解與AOP切面執(zhí)行順序
這篇文章主要介紹了淺談SpringSecurity注解與AOP切面執(zhí)行順序,引入Spring Security后,在Controller的方法中會出現(xiàn)Spring Security的方法注解與AOP同時(shí)存在的問題,這是就會設(shè)計(jì)順序問題,需要的朋友可以參考下2023-10-10獲取Java加載器和類完整結(jié)構(gòu)的方法分享
這篇文章主要為大家詳細(xì)介紹了獲取Java加載器和類完整結(jié)構(gòu)的方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下2022-12-12如何使用Spring AOP預(yù)處理Controller的參數(shù)
這篇文章主要介紹了如何使用Spring AOP預(yù)處理Controller的參數(shù)操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08