在JDK1.8之后的版本里面喳挑,Java追加了一個(gè)新的日期時(shí)間的處理包:java.time裸诽,在這個(gè)包中提供了三個(gè)主要的類型:LocalDate、LocalTime蹬竖、LocalDateTime沼沈。
可以通過這些類更加簡(jiǎn)單的進(jìn)行日期、日期時(shí)間或日期時(shí)間的處理币厕,相比較之前的Calendar類來講列另,這些類的使用更加方便。
范例:獲取當(dāng)前時(shí)間:
import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Test {
public static void main(String[] args) throws ParseException {
LocalDate localDate = LocalDate.now(); //獲取當(dāng)前的日期
LocalTime localTime = LocalTime.now(); //獲取當(dāng)前的時(shí)間
LocalDateTime localDateTime = LocalDateTime.now(); //獲得當(dāng)前的日期時(shí)間
System.out.println("LocalDate 實(shí)例化對(duì)象輸出:" + localDate);
System.out.println("LocalTime 實(shí)例化對(duì)象輸出:" + localTime);
System.out.println("LocalDateTime 實(shí)例化對(duì)象輸出:" + localDateTime);
}
}
輸出:
LocalDate 實(shí)例化對(duì)象輸出:2020-05-27
LocalTime 實(shí)例化對(duì)象輸出:15:23:02.410
LocalDateTime 實(shí)例化對(duì)象輸出:2020-05-27T15:23:02.410
通過本程序的代碼可以發(fā)現(xiàn)劈榨,每一個(gè)日期時(shí)間類都會(huì)存在一個(gè)now()的方法访递,這個(gè)方法可以直接獲取當(dāng)前系統(tǒng)的日期時(shí)間,并且在輸出這些對(duì)象的時(shí)候都可以得到非常明確的信息內(nèi)容同辣。
在java.time包中最為重要的就屬于LocalDate類拷姿,這個(gè)類除了可以直接利用對(duì)象的toString()方法卜朗,獲取日期時(shí)間之外蟀伸,也可以針對(duì)與年莽使、月蜻懦、日等數(shù)據(jù)分開獲取颗管。
范例:通過LocalDate獲取詳細(xì)日期數(shù)據(jù)
import java.text.ParseException;
import java.time.LocalDate;
import java.time.temporal.ChronoField;
public class Test {
public static void main(String[] args) throws ParseException {
LocalDate today = LocalDate.now(); //獲取當(dāng)前的日期
System.out.println(String.format("當(dāng)前日期:%s-%s-%s",
today.getYear(),
today.getMonthValue(),
today.getDayOfMonth()
));
System.out.println("今天所處當(dāng)前周的天數(shù):" + today.get(ChronoField.DAY_OF_WEEK));
System.out.println("今天所處當(dāng)前月的周數(shù):" + today.get(ChronoField.ALIGNED_WEEK_OF_MONTH));
System.out.println("今天所處當(dāng)前月的天數(shù):" + today.getDayOfMonth());
System.out.println("今天所處當(dāng)前年的周數(shù):" + today.get(ChronoField.ALIGNED_WEEK_OF_YEAR));
System.out.println("今天所處當(dāng)前年的天數(shù):" + today.getDayOfYear());
}
}
輸出:
當(dāng)前日期:2020-5-27
今天所處當(dāng)前周的天數(shù):3
今天所處當(dāng)前月的周數(shù):4
今天所處當(dāng)前月的天數(shù):27
今天所處當(dāng)前年的周數(shù):22
今天所處當(dāng)前年的天數(shù):148
同樣都屬于日期的處理甸陌,但是可以明顯的感覺到通過LocalDate要比直接使用Calendar類處理更加簡(jiǎn)單湘捎。
實(shí)際上使用LocalDate可以很方便的判斷某一個(gè)日期所在的年是否為閏年钟沛。
范例:判斷閏年
import java.text.ParseException;
import java.time.LocalDate;
public class Test {
public static void main(String[] args) {
LocalDate localDate = LocalDate.parse("1988-09-15"); //操作特定日期
System.out.println("閏年判斷:" + localDate.isLeapYear());
}
}
輸出:
閏年判斷:true
在使用LocalDate類進(jìn)行日期處理的時(shí)候券腔,最為強(qiáng)大的功能是可以直接進(jìn)行日期的計(jì)算處理伏穆,例如:獲取所在月的第一天,或者是最后一天纷纫。
范例:
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class Test {
public static void main(String[] args) {
LocalDate localDate = LocalDate.parse("1988-09-15"); //操作特定日期
System.out.println("所在月的第一天: " + localDate.with(TemporalAdjusters.firstDayOfMonth()));
System.out.println("所在月的第二天: " + localDate.withDayOfMonth(2));
System.out.println("所在月的最后一天: " + localDate.with(TemporalAdjusters.lastDayOfMonth()));
System.out.println("300年后的日期: " + localDate.plusYears(300));
System.out.println("日期所處月的第一個(gè)周一: " + localDate.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)));
}
}
輸出:
所在月的第一天: 1988-09-01
所在月的第二天: 1988-09-02
所在月的最后一天: 1988-09-30
300年后的日期: 2288-09-15
日期所處月的第一個(gè)周一: 1988-09-05
通過以上的一系列分析之后可以發(fā)現(xiàn)枕扫,在進(jìn)行日期數(shù)據(jù)的處理上,實(shí)際上使用LocalDate類要比直接使用Calendar類更加簡(jiǎn)單辱魁,同時(shí)這個(gè)類也屬于新時(shí)代的類烟瞧。