在Java8之前的版本中褐望,我們處理時(shí)間類型常常使用的是java.util包下的Date類勒庄。
但使用Date類卻有諸多的弊端,如:java.util.Date是非線程安全的瘫里,所有的日期類都是可變的实蔽;日期/時(shí)間類的定義并不一致,在java.util和java.sql的包下都含有Date類谨读,在開發(fā)過程中極易出錯(cuò)局装; 日期類并不提供國際化,沒有時(shí)區(qū)支持
為了解決以上問題,Java8在java.time包下提供了很多新的API铐尚,常用的類包括LocalDate拨脉、LocalTime、LocalDateTime,用以處理日期,時(shí)間敢伸,日期/時(shí)間等
LocalDate類
LocalDate是一個(gè)不可變類桶略,在不考慮時(shí)區(qū)的情況下可以對(duì)日期(不包括時(shí)間)進(jìn)行各種操作,它的默認(rèn)格式是yyyy-MM-dd
獲取當(dāng)前日期以及年、月、日
代碼示例:
//獲取當(dāng)前日期以及年、月解阅、日
LocalDatelocalDate=LocalDate.now();
intyear=localDate.getYear();
intmonth=localDate.getMonthValue();
intday=localDate.getDayOfMonth();
System.out.println("當(dāng)前日期:"+localDate);
System.out.println("年:"+year+"月:"+month+"日:"+day);
運(yùn)行結(jié)果:
當(dāng)前日期:2018-12-12
年:2018月:12日:12
獲取指定的日期
代碼示例:
//獲取指定的日期
LocalDatespecifiedDay=LocalDate.of(2008,8,18);
System.out.println("指定日期:"+specifiedDay);
運(yùn)行結(jié)果:
指定日期:2008-08-18
比較兩個(gè)時(shí)間的先后順序以及是否相等
代碼示例:
LocalDatelocalDate=LocalDate.now();
LocalDateotherDate=LocalDate.of(2018,11,11);
//equals方法用于比較兩個(gè)日期是否相等
if(localDate.equals(otherDate)){
System.out.println("localDate與otherDate相等!");
}else{
//isAfter和isBefore方法用于比較兩個(gè)日期前后順序
if(localDate.isAfter(otherDate)){
System.out.println("localDate晚于otherDate闷串!");
}
if(localDate.isBefore(otherDate)){
System.out.println("localDate早于otherDate瓮钥!");
}
}
運(yùn)行結(jié)果:
localDate晚于otherDate!
對(duì)日期做加減運(yùn)算
代碼示例:
LocalDatelocalDate=LocalDate.now();
System.out.println("2年后日期:"+localDate.plusYears(2));
System.out.println("6月后日期:"+localDate.plusMonths(6));
System.out.println("3周后日期:"+localDate.plusWeeks(3));
System.out.println("15天后日期:"+localDate.plusDays(15));
System.out.println("2年前日期:"+localDate.minusYears(2));
System.out.println("6月前日期:"+localDate.minusMonths(6));
System.out.println("3周前日期:"+localDate.minusWeeks(3));
System.out.println("15天前日期:"+localDate.minusDays(15));
運(yùn)行結(jié)果:
2年后日期:2020-12-12
6月后日期:2019-06-12
3周后日期:2019-01-02
15天后日期:2018-12-27
2年前日期:2016-12-12
6月前日期:2018-06-12
3周前日期:2018-11-21
15天前日期:2018-11-27
獲取日期間隔的天數(shù)
代碼示例:
//獲取某年份的第N天的日期
LocalDatespecialDay=LocalDate.ofYearDay(2018,100);
System.out.println("2018年的第100天:"+specialDay);
//獲取兩個(gè)日期的間隔天數(shù)
longintervalDay=localDate.toEpochDay()-specialDay.toEpochDay();
System.out.println("間隔天數(shù):"+intervalDay);
運(yùn)行結(jié)果:
2018年的第100天:2018-04-10
間隔天數(shù):246
LocalTime類
LocalTime與LocalDate一樣烹吵,也是一個(gè)不可變的類碉熄,默認(rèn)格式是hh:mm:ss.zzz,它提供了對(duì)時(shí)間的各種操作
獲取當(dāng)前時(shí)間以及自定義時(shí)間
代碼示例:
//獲取當(dāng)前時(shí)間肋拔、時(shí)锈津、分、秒以及自定義時(shí)間
LocalTimelocalTime=LocalTime.now();
inthour=localTime.getHour();
intminute=localTime.getMinute();
intsecond=localTime.getSecond();
System.out.println("當(dāng)前時(shí)間:"+localTime);
System.out.println("時(shí):"+hour+"分:"+minute+"秒:"+second);
//獲取自定義時(shí)間
LocalTimespecifiedTime=LocalTime.of(15,30,45);
System.out.println("自定義時(shí)間:"+specifiedTime);
運(yùn)行結(jié)果:
當(dāng)前時(shí)間:13:45:59.039
時(shí):13分:45秒:59
自定義時(shí)間:15:30:45
比較兩個(gè)時(shí)間的先后順序
代碼示例:
//equals方法比較兩個(gè)時(shí)間是否相等
if(localTime.equals(specifiedTime)){
System.out.println("localTime與specifiedTime相等凉蜂!");
}else{
//isAfter琼梆、isBefore方法比較兩個(gè)時(shí)間的先后順序
if(localTime.isAfter(specifiedTime)){
System.out.println("localTime晚于specifiedTime!");
}
if(localTime.isBefore(specifiedTime)){
System.out.println("localTime早于specifiedTime窿吩!");
}
}
運(yùn)行結(jié)果:
localTime早于specifiedTime茎杂!
對(duì)時(shí)間做加減運(yùn)算
代碼示例:
LocalTimelocalTime=LocalTime.now();
System.out.println("當(dāng)前時(shí)間:"+localTime);
System.out.println("2小時(shí)后時(shí)間:"+localTime.plusHours(2));
System.out.println("30分鐘后時(shí)間:"+localTime.plusMinutes(30));
System.out.println("500秒后日時(shí)間:"+localTime.plusSeconds(500));
System.out.println("2小時(shí)前時(shí)間:"+localTime.minusHours(2));
System.out.println("30分鐘前時(shí)間:"+localTime.minusMinutes(30));
System.out.println("500秒前時(shí)間:"+localTime.minusSeconds(500));
運(yùn)行結(jié)果:
當(dāng)前時(shí)間:14:10:15.666
2小時(shí)后時(shí)間:16:10:15.666
30分鐘后時(shí)間:14:40:15.666
500秒后時(shí)間:14:18:35.666
2小時(shí)前時(shí)間:12:10:15.666
30分鐘前時(shí)間:13:40:15.666
500秒前時(shí)間:14:01:55.666
LocalDateTime類
LocalDateTime是一個(gè)不可變的日期-時(shí)間對(duì)象,它既包含了日期同時(shí)又含有時(shí)間纫雁,默認(rèn)格式是yyyy-MM-ddTHH-mm-ss.zzz
獲取當(dāng)前日期時(shí)間以及自定義日期時(shí)間
示例代碼:
//獲取當(dāng)前的日期時(shí)間
LocalDateTimelocalDateTime=LocalDateTime.now();
System.out.println("當(dāng)前的日期時(shí)間:"+localDateTime);
//獲取自定義的的日期時(shí)間
LocalDateTimespecifiedDateTime=LocalDateTime.of(LocalDate.now(),LocalTime.now());
System.out.println("自定義的日期時(shí)間:"+specifiedDateTime);
運(yùn)行結(jié)果:
當(dāng)前的日期時(shí)間:2018-12-12T14:31:00.163
自定義的日期時(shí)間:2018-12-12T14:31:00.164
轉(zhuǎn)化為日期和時(shí)間
代碼示例:
//轉(zhuǎn)化為LocalDate和LocalTime
LocalDatelocalDate=localDateTime.toLocalDate();
LocalTimelocalTime=localDateTime.toLocalTime();
System.out.println("當(dāng)前日期:"+localDate);
System.out.println("當(dāng)前時(shí)間:"+localTime);
運(yùn)行結(jié)果:
當(dāng)前日期:2018-12-12
當(dāng)前時(shí)間:14:31:00.163