【Java8】Java8實(shí)戰(zhàn)之時(shí)間日期操作

Java8實(shí)戰(zhàn)之時(shí)間日期操作

前言

前面我們已經(jīng)基本學(xué)習(xí)完Java8中應(yīng)用場(chǎng)景比較廣泛的新功能或者說(shuō)新特性,在本小節(jié)中,我們?cè)賮?lái)學(xué)習(xí)多一個(gè)新特性,時(shí)間日期操作。

時(shí)間日期操作

在Java8之前,由于JDK本身設(shè)計(jì)的問(wèn)題,導(dǎo)致了存在的時(shí)間日期API使用起來(lái)不是很好用,其語(yǔ)義也不是很好,比如Date表示的是時(shí)間以及日期,為了使得時(shí)間日期相關(guān)的API操作起來(lái)比較方便,語(yǔ)義更好,Java8中加入了新的時(shí)間以及日期操作,位于java.time包中

java.time包中有許多的類,不過(guò)我們關(guān)心的主要有以下幾個(gè)

  • LocalDate,日期操作類
  • LocalTime,時(shí)間操作類
  • LocalDateTime,日期時(shí)間
  • Duration,時(shí)間間隔
  • Period,日期間隔

LocalDate

正如其名,LocalDate表示的是本地的日期,根據(jù)OS的設(shè)置來(lái)獲取對(duì)應(yīng)的時(shí)區(qū)等信息,其用法也非常簡(jiǎn)單

// 獲取某個(gè)時(shí)間的對(duì)象
LocalDate date = LocalDate.of(2018, 8, 14);
// 通過(guò)該對(duì)象可以獲取年月日等信息,其API比較見(jiàn)名知義,就不展開(kāi)介紹了
int year = date.getYear();

Month month = date.getMonth();

int day = date.getDayOfMonth();

DayOfWeek dow = date.getDayOfWeek();

int len = date.lengthOfMonth();

boolean leap = date.isLeapYear();

// 獲取當(dāng)前日期
LocalDate today = LocalDate.now();

// 解析日期字符串
LocalDate date1 = LocalDate.parse("2018-08-14");

LocalTime

LocalTime表示的是當(dāng)前的時(shí)間,其主要用法如下

// 獲取當(dāng)前時(shí)間
LocalTime time = LocalTime.now();
System.out.println(time.getHour());
System.out.println(time.getMinute());
System.out.println(time.getSecond());
System.out.println(time.getNano());

// 解析時(shí)間字符串
LocalTime time1 = LocalTime.parse("13:45:20");

LocalDateTime

LocalDateTime表示的是日期以及時(shí)間,大致等于以前的Date對(duì)象

LocalDateTime dt1 = LocalDateTime.of(LocalDate.now(), LocalTime.now());

LocalDateTime dt2 = LocalDateTime.of(2018, Month.JULY, 24, 9, 32, 20);

LocalDateTime dt3 = LocalDate.now().atTime(13, 45, 20);
LocalDateTime dt4 = LocalDate.now().atTime(LocalTime.now());
LocalDateTime dt5 = LocalTime.now().atDate(LocalDate.now());

LocalDate date = dt1.toLocalDate();
LocalTime time = dt2.toLocalTime();

Duration

Duration表示的是兩個(gè)時(shí)間的間隔,注意不能用于表示兩個(gè)日期間隔

Duration d1 = Duration.between(LocalTime.now(), LocalTime.now());
Duration d3 = Duration.between(Instant.now(), Instant.now());

Duration threeMinutes = Duration.ofMinutes(3);
Duration threeMinutess = Duration.of(3, ChronoUnit.MINUTES);

Period

Period表示的是兩個(gè)日期的間隔,注意不能用來(lái)表示兩個(gè)時(shí)間間隔

Period p1 = Period.between(LocalDate.now(), LocalDate.now());
Period tenDays = Period.ofDays(10);
Period threeWeeks = Period.ofWeeks(3);

當(dāng)然,在Java8中還提供了其他很多的操作,比如時(shí)間或者日期的增加、減少,將日期調(diào)整到某一天等,由于使用起來(lái)相對(duì)比較簡(jiǎn)單,所有在使用時(shí)直接參考官方API即可

總結(jié)

本小節(jié)主要簡(jiǎn)單地介紹了Java8中新的日期以及時(shí)間操作API,由于新的API語(yǔ)義性非常好,所以也沒(méi)有過(guò)多地展開(kāi),在需要的時(shí)候查一下文檔就足夠了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容