Java8新特性之日期-時間API
來源:cnblogs.com/liantdev/p/10108504.html
在Java8之前的版本中,我們處理時間型別常常使用的是java.util包下的Date類。
但使用Date類卻有諸多的弊端,如:java.util.Date是非執行緒安全的,所有的日期類都是可變的;日期/時間類的定義並不一致,在java.util和java.sql的包下都含有Date類,在開發過程中極易出錯; 日期類並不提供國際化,沒有時區支援。
為了解決以上問題,Java8在java.time包下提供了很多新的API,常用的類包括LocalDate、LocalTime、LocalDateTime,用以處理日期,時間,日期/時間等
LocalDate類
LocalDate是一個不可變類,在不考慮時區的情況下可以對日期(不包括時間)進行各種操作,它的預設格式是yyyy-MM-dd
獲取當前日期以及年、月、日
程式碼示例:
//獲取當前日期以及年、月、日
LocalDate localDate = LocalDate.now();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int day = localDate.getDayOfMonth();
System.out.println("當前日期:" + localDate);
System.out.println("年:" + year + " 月:" + month + " 日:" + day);
執行結果:
當前日期:2018-12-12
年:2018 月:12 日:12
獲取指定的日期
程式碼示例:
//獲取指定的日期
LocalDate specifiedDay = LocalDate.of(2008, 8, 18);
System.out.println("指定日期:" + specifiedDay);
執行結果:
指定日期:2008-08-18
比較兩個時間的先後順序以及是否相等
程式碼示例:
LocalDate localDate = LocalDate.now();
LocalDate otherDate = LocalDate.of(2018, 11, 11);
//equals方法用於比較兩個日期是否相等
if(localDate.equals(otherDate)) {
System.out.println("localDate與otherDate相等!");
} else {
//isAfter和isBefore方法用於比較兩個日期前後順序
if(localDate.isAfter(otherDate)) {
System.out.println("localDate晚於otherDate!");
}
if(localDate.isBefore(otherDate)) {
System.out.println("localDate早於otherDate!");
}
}
執行結果:
localDate晚於otherDate!
對日期做加減運算
程式碼示例:
LocalDate localDate = 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));
執行結果:
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
獲取日期間隔的天數
程式碼示例:
//獲取某年份的第N天的日期
LocalDate specialDay = LocalDate.ofYearDay(2018, 100);
System.out.println("2018年的第100天:" + specialDay);
//獲取兩個日期的間隔天數
long intervalDay = localDate.toEpochDay() - specialDay.toEpochDay();
System.out.println("間隔天數: " + intervalDay);
執行結果:
2018年的第100天:2018-04-10
間隔天數:246
LocalTime類
LocalTime與LocalDate一樣,也是一個不可變的類,預設格式是hh:mm:ss.zzz,它提供了對時間的各種操作
獲取當前時間以及自定義時間
程式碼示例:
//獲取當前時間、時、分、秒以及自定義時間
LocalTime localTime = LocalTime.now();
int hour = localTime.getHour();
int minute = localTime.getMinute();
int second = localTime.getSecond();
System.out.println("當前時間:" + localTime);
System.out.println("時:" + hour + " 分:" + minute + " 秒:" + second);
//獲取自定義時間
LocalTime specifiedTime = LocalTime.of(15, 30, 45);
System.out.println("自定義時間:" + specifiedTime);
執行結果:
當前時間:13:45:59.039
時:13 分:45 秒:59
自定義時間:15:30:45
比較兩個時間的先後順序
程式碼示例:
//equals方法比較兩個時間是否相等
if(localTime.equals(specifiedTime)) {
System.out.println("localTime與specifiedTime相等!");
} else {
//isAfter、isBefore方法比較兩個時間的先後順序
if(localTime.isAfter(specifiedTime)) {
System.out.println("localTime晚於specifiedTime!");
}
if(localTime.isBefore(specifiedTime)) {
System.out.println("localTime早於specifiedTime!");
}
}
執行結果:
localTime早於specifiedTime!
對時間做加減運算
程式碼示例:
LocalTime localTime = LocalTime.now();
System.out.println("當前時間:" + localTime);
System.out.println("2小時後時間:" + localTime.plusHours(2));
System.out.println("30分鐘後時間:" + localTime.plusMinutes(30));
System.out.println("500秒後日時間:" + localTime.plusSeconds(500));
System.out.println("2小時前時間:" + localTime.minusHours(2));
System.out.println("30分鐘前時間:" + localTime.minusMinutes(30));
System.out.println("500秒前時間:" + localTime.minusSeconds(500));
執行結果:
當前時間:14:10:15.666
2小時後時間:16:10:15.666
30分鐘後時間:14:40:15.666
500秒後時間:14:18:35.666
2小時前時間:12:10:15.666
30分鐘前時間:13:40:15.666
500秒前時間:14:01:55.666
LocalDateTime類
LocalDateTime是一個不可變的日期-時間物件,它既包含了日期同時又含有時間,預設格式是yyyy-MM-ddTHH-mm-ss.zzz
獲取當前日期時間以及自定義日期時間
示例程式碼:
//獲取當前的日期時間
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("當前的日期時間:" + localDateTime);
//獲取自定義的的日期時間
LocalDateTime specifiedDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.now());
System.out.println("自定義的日期時間:" + specifiedDateTime);
執行結果:
當前的日期時間:2018-12-12T14:31:00.163
自定義的日期時間:2018-12-12T14:31:00.164
轉化為日期和時間
程式碼示例:
//轉化為LocalDate和LocalTime
LocalDate localDate = localDateTime.toLocalDate();
LocalTime localTime = localDateTime.toLocalTime();
System.out.println("當前日期:" + localDate);
System.out.println("當前時間:" + localTime);
執行結果:
當前日期:2018-12-12
當前時間:14:31:00.163
Java團長
專注於Java乾貨分享
掃描上方二維碼獲取更多Java乾貨
相關文章
- java8 新特性之日期時間 APIJavaAPI
- Java8新特性之時間APIJavaAPI
- Java8新特性探索之新日期時間庫Java
- java8 – 新的時間日期API示例JavaAPI
- 【Java8新特性】關於Java8中的日期時間API,你需要掌握這些!!JavaAPI
- Java 8新特性(四):新的時間和日期APIJavaAPI
- Java8新特性--Stream APIJavaAPI
- 《Java8實戰》-第十二章筆記(新的日期和時間API)Java筆記API
- 【JAVA8新的時間與日期 API】- 傳統時間格式化的執行緒安全問題JavaAPI執行緒
- JDK1.8-新的日期和時間APIJDKAPI
- Java8學習筆記(九)--日期/時間(Date Time)API指南Java筆記API
- Java8新特性之:OptionalJava
- Java日期時間操作基礎——包含JDK1.8時間操作新特性JavaJDK
- Java8新特性第3章(Stream API)JavaAPI
- ?Java8新特性之Optional類Java
- java8 新特性之方法引用Java
- java8 新特性之Optional 類Java
- Java8 新特性之 Optional 類Java
- 《Java 8 in Action》Chapter 12:新的日期和時間APIJavaAPTAPI
- Java 中的時間日期 APIJavaAPI
- Java 8 的時間日期 APIJavaAPI
- java8 新特性之Lambda 表示式Java
- java8 新特性之預設方法Java
- Java8新特性探索之Stream介面Java
- Java8 新特性之 Lambda 表示式Java
- JAVA8新特性Java
- Java8 新特性Java
- Java 8 日期和時間的APIJavaAPI
- java8 新特性之函式式介面Java函式
- java8新特性之lambda表示式(一)Java
- Java8 新特性之預設介面方法Java
- java8 之 Java官方庫的新特性Java
- 【Java8新特性】Stream API有哪些中間操作?看完你也可以吊打面試官!!JavaAPI面試
- 13. 尚矽谷_Java8新特性_Stream API 練習JavaAPI
- Java8新特性 - LambdaJava
- Java8的新特性Java
- JAVA8新特性用法Java
- Java 8 日期/時間(Date Time)API指南JavaAPI