首頁技術(shù)文章正文

JDK8新增的日期與時間類有多少種?應(yīng)該怎么樣使用?

更新時間:2021-07-05 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班


為了滿足更多的需求,JDK 8中新增了一個java.time包,在該包下包含了更多的日期和時間操作類,其常用類如表1所示。

表1 JDK 8新增日期、時間常用類

類名功能描述
Clock用于獲取指定時區(qū)的當(dāng)前日期、時間。
DayOfWeek枚舉類,定義了一周七天周一到周日的枚舉值
Duration表示持續(xù)時間。該類提供的ofXxx()方法用于獲取指定的時間的小時、分鐘、秒數(shù)等。
Instant表示一個具體時刻,可以精確到納秒。該類提供了靜態(tài)的now()方法來獲取當(dāng)前時刻,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的時刻。同時還提供了一系列的plusXxx()方法來獲取當(dāng)前時刻基礎(chǔ)上加上一段時間,以及一系列的minusXxx()方法在當(dāng)前時刻基礎(chǔ)上減去一段時間。
LocalDate表示不帶時區(qū)的日期,如2018-01-27。該類提供了靜態(tài)的now()方法來獲取當(dāng)前日期,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的日期。同時還提供了一系列的plusXxx()方法在當(dāng)前年份基礎(chǔ)上加上幾年、幾月、幾日等,以及一系列的minusXxx()方法在當(dāng)前年份基礎(chǔ)上減去幾年、幾月、幾日等。      
LocalTime表示不帶時區(qū)的時間,如14:49:20。該類提供了靜態(tài)的now()方法來獲取當(dāng)前時間,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的時間。同時還提供了一系列的plusXxx()方法在當(dāng)前年份基礎(chǔ)上加上幾小時、幾分、幾秒等,以及一系列的minusXxx()方法在當(dāng)前年份基礎(chǔ)上減去幾小時、幾分、幾秒等。
LocalDateTime表示不帶時區(qū)的日期、時間。該類提供了靜態(tài)的now()方法來獲取當(dāng)前日期、時間,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的日期、時間。同時還提供了一系列的plusXxx()方法在當(dāng)前年份基礎(chǔ)上加上幾年、幾月、幾日、幾小時、幾分、幾秒等,以及一系列的minusXxx()方法在當(dāng)前年份基礎(chǔ)上減去幾年、幾月、幾日、幾小時、幾分、幾秒等。
Month枚舉類,定義了一月到十二月的枚舉值
MonthDay表示月日,如--01-27。該類提供了靜態(tài)的now()方法來獲取當(dāng)前月日,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的月日。
Year表示年,如2018。該類提供了靜態(tài)的now()方法來獲取當(dāng)前年份,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的年份。同時還提供了plusYears()方法在當(dāng)前年份基礎(chǔ)上增加幾年,以及minusYears()方法在當(dāng)前年份基礎(chǔ)上減去幾年。
YearMonth表示年月,如2018-01。該類提供了靜態(tài)的now()方法來獲取當(dāng)前年月,提供了靜態(tài)的now(Clock clock)方法來獲取clock對應(yīng)的年月。同時還提供了plusXxx()方法在當(dāng)前年月基礎(chǔ)上增加幾年、幾月,以及minusXxx()方法在當(dāng)前年月基礎(chǔ)上減去幾年、幾月。
ZoneId表示一個時區(qū)
ZonedDateTime表示一個時區(qū)化的日期、時間

了解了上述各個類的作用后,接下來通過一個具體的案例來演示這些類的用法,如文件1所示。

文件1 Example23

     import java.time.*;
     public class Example23 {
         public static void main(String[] args) {
             // 1、Clock的使用
             Clock clock = Clock.systemUTC();
             System.out.println("獲取UTC時區(qū)轉(zhuǎn)換的當(dāng)前時間:" + clock.instant());
             System.out.println("獲取UTC時區(qū)轉(zhuǎn)換的的毫秒數(shù):" + clock.millis());
             // 2、Duration的使用
             Duration d = Duration.ofDays(1);
             System.out.println("一天等于" + d.toHours() +"小時");
             System.out.println("一天等于" + d.toMinutes() +"分鐘");
             System.out.println("一天等于" + d.toMillis() +"秒");
             // 3、Instant的使用
             Instant instant = Instant.now();
             System.out.println("獲取UTC時區(qū)的當(dāng)前時間為:" + instant);
             System.out.println("當(dāng)前時間一小時后的時間為:" 
                                    + instant.plusSeconds(3600));
             System.out.println("當(dāng)前時間一小時前的時間為:" 
                                    + instant.minusSeconds(3600));
             // 4、LocalDate的使用
             LocalDate localDate = LocalDate.now();
             System.out.println("從默認(rèn)時區(qū)的系統(tǒng)時鐘獲得當(dāng)前日期:" + localDate);
             // 5、LocalTime的使用
             LocalTime localTime = LocalTime.now();
             System.out.println("從默認(rèn)時區(qū)的系統(tǒng)時鐘獲取當(dāng)前時間:" + localTime);
             // 6、LocalDateTime的使用
             LocalDateTime localDateTime = LocalDateTime.now();
             System.out.println("從默認(rèn)時區(qū)的系統(tǒng)時鐘獲取日期、時間:"
                                     + localDateTime);
             LocalDateTime times = localDateTime.plusDays(1)
                                 .plusHours(3).plusMinutes(30);
             System.out.println("當(dāng)前的日期、時間加上1天3小時30分之后:" + times);
             // 7、Year、YearMonth、MonthDay的使用
             Year year = Year.now();
             System.out.println("當(dāng)前年份為:" + year);
             YearMonth yearMonth = YearMonth.now();
             System.out.println("當(dāng)前年月為:" + yearMonth);
             MonthDay monthDay = MonthDay.now();
             System.out.println("當(dāng)前月日為:" + monthDay);
             // 8、 獲取系統(tǒng)默認(rèn)時區(qū)
             ZoneId zoneId = ZoneId.systemDefault();
             System.out.println("當(dāng)前系統(tǒng)默認(rèn)時區(qū)為:" + zoneId);
         }
     }

運行結(jié)果如圖1所示。
JDK8新增日期與時間類

圖1 運行結(jié)果

文件1中,演示了JDK 8新增日期時間、包中類的一些用法。需要注意的是,從圖5-23可以看出,通過clock.instant()和Instant.now()獲取的當(dāng)前時間與本地系統(tǒng)顯示時間有8個小時的時差,這是因為Instant默認(rèn)使用的是UTC(Universal Time Coordinated)世界協(xié)調(diào)時間,又稱世界標(biāo)準(zhǔn)時間,UTC 提供了一種與時區(qū)無關(guān)的時間,與CST(China Standard Time)中國標(biāo)準(zhǔn)時間(北京時間)有8個小時的時差。






猜你喜歡:

JDK8有哪些新特性?[視頻介紹]

Spring中的JDK動態(tài)代理是如何實現(xiàn)的?

JavaScript中Date對象的用法詳解

黑馬程序員Java開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報名
和我們在線交談!