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í)候查一下文檔就足夠了。