java8 LocalDate LocalDateTime等時間類用法實例分析
本文實例講述了java8 LocalDate LocalDateTime等時間類用法。分享給大家供大家參考,具體如下:
這篇文章主要是java8中新的Date和Time API的實戰(zhàn)。新的Date和Time類是Java開發(fā)者社區(qū)千呼萬喚始出來的。Java8 之前存在的Date類一直都受人詬病,很多人都會選擇使用第三方的date庫joda-time。Java8中的date和time api是jodatime的作者參與開發(fā)的,實現(xiàn)了JSR310的全部內(nèi)容。這些新的api都在包java.time下。
既然第三方的joda-time,date4j都已經(jīng)足夠強(qiáng)大了,為什么java8還要重新實現(xiàn)他呢,一部分的原因是這些第三方的庫是存在兼容問題的,比如標(biāo)準(zhǔn)的JSF日期轉(zhuǎn)化器與joda-time api,就不兼容,每次使用都需要編寫自己的轉(zhuǎn)換器,所以標(biāo)準(zhǔn)化api是必須的,就有了JSR310,java8中就實現(xiàn)了他全部的規(guī)定內(nèi)容。
新Date類和Time類背后的設(shè)計原則:
不可變類
java8之前,Date類都是可變類。當(dāng)我們在多線程環(huán)境下使用它,編程人員應(yīng)該確認(rèn)Date對象的線程安全。Java8的Date和Time API提供了線程安全的不可變類。編程人員不用考慮并發(fā)的問題。
領(lǐng)域模型驅(qū)動設(shè)計方法
新的日期和時間的類別遵循“域驅(qū)動設(shè)計”。對于開發(fā)者來說,理解方法和類的功能是很容易的。
java.time.LocalDate:
LocalDate只提供日期不提供時間信息。它是不可變類且線程安全的。
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只提供時間而不提供日期信息,它是不可變類且線程安全的。
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提供時間和日期的信息,它是不可變類且線程安全的
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是用來計算兩個給定的日期之間包含多少秒,多少毫秒,它是不可變類且線程安全的
java.time.Period:
Period是用來計算兩個給定的日期之間包含多少天,多少月或者多少年,它是不可變類且線程安全的
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:這里再為大家推薦幾款時間及日期相關(guān)工具供大家參考使用:
在線日期/天數(shù)計算器:
http://tools.jb51.net/jisuanqi/date_jisuanqi
在線日期計算器/相差天數(shù)計算器:
http://tools.jb51.net/jisuanqi/datecalc
在線日期天數(shù)差計算器:
http://tools.jb51.net/jisuanqi/onlinedatejsq
Unix時間戳(timestamp)轉(zhuǎn)換工具:
http://tools.jb51.net/code/unixtime
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
spring-shiro權(quán)限控制realm實戰(zhàn)教程
這篇文章主要介紹了spring-shiro權(quán)限控制realm實戰(zhàn)教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Java用Arrays.asList初始化ArrayList實例方法
在本篇文章里小編給大家分享的是關(guān)于Java中使用Arrays.asList初始化ArrayList的知識點內(nèi)容,需要的朋友們參考下。2019-10-10
Java異常繼承結(jié)構(gòu)解析_動力節(jié)點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è)計順序問題,需要的朋友可以參考下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ù)操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08

