java8 新增的操做時間和日期的類

在java8以前,操做日期和時間jdk提供了Date類和Calendar類,想一想其操做就很頭疼,及其不方便,因此項目裏更多操做時間和日期的地方都要引入第三方jar包,joda-time就是很受歡迎的一個。 閒話少說,直接上代碼。 若是想獲取下一秒怎麼辦? 以前:java

Date now = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
calendar.add(Calendar.SECOND, 1);
Date nextSecond = calendar.getTime();

以後:編程

LocalTime time = LocalTime.now();
LocalTime nextSecond = time.plusSeconds(1);

amazing?有沒有? 不只代碼簡潔了不少,並且也很容易理解,當前time就是用LocalTime.now();下一秒就是plusSeconds(1)便可;api

再好比想獲取今天12:30:56(即中午十二點三十分56秒)呢? 以前:安全

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 12);
calendar.set(Calendar.MINUTE, 30);
calendar.set(Calendar.SECOND, 56);
//calendar.set(2017,06,27,12,30,56);

能夠小時,分鐘,秒分別置給calendar對象,也可使用下面註釋的那行,不過必須還要傳入日期(注意第二個參數month是從0開始的,7月就要傳入6。。。),很麻煩 以後:多線程

LocalTime time = LocalTime.of(12,30,56,0);

簡單的髮指。。(注意最後一個參數是nanoOfSecond,還有一個不傳入此參數的方法)併發

固然 LocalTime類還提供了一些其餘的靜態屬性和方法,好比 LocalTime提供的靜態屬性和靜態方法 Collapse source.net

LocalTime MIDNIGHT; //午夜時分
LocalTime MIN;      //00:00一天的開始  同上方的午夜
LocalTime MAX;      //23:59:59.999999999  午夜前的最後一刻
LocalTime NOON;     //中午  12:00
 
long secondsOfDay = 3600;
LocalTime oneClock = LocalTime.ofSecondOfDay(secondsOfDay);  //返回當日某個秒數對應的對象,好比 3600 對應01:00
 
System.out.println("hour:"+oneClock.getHour()+"\tminutes:"+oneClock.getMinute());//getHour,getMinute,getSecond->返回對象對應的時分秒
 
LocalTime twoClock = oneClock.withHour(2);  //返回onclick對象是否小時維度是2,若是是,就返回,不然返回 小時是2,分表是onclock的分秒
 
System.out.println("02:00對應一天的第 " + twoClock.toSecondOfDay() + "秒");   //返回twoClock對應的秒數(7200)
 
System.out.println("2點和1點比較:\t" + twoClock.compareTo(oneClock));   //重寫了compareTo方法,返回2個localtime大小比較,大於1,小於-1,等於0
 
System.out.println("1點是在2點以後嗎?\t" + oneClock.isAfter(twoClock));     //返回2者先後比較(isBefore) 實際仍是調用的compareTo方法
 
System.out.println("重寫了equals方法:\t" + twoClock.equals(LocalTime.of(2,0))); //重寫了equals方法
 
System.out.println("重寫了toString方法:\t" + LocalTime.of(12,30,56).toString());  //重寫了toString方法

打印結果以下: hour:1 minutes:0 02:00對應一天的第 7200秒 2點和1點比較: 1 1點是在2點以後嗎? false 重寫了equals方法: true 重寫了toString方法: 12:30:56線程

還有一些沒有深刻研究的方法,好比parse,format等,有興趣能夠看看設計

固然,細心的童鞋發現了,怎麼都是操做時間的,說好的日期呢? 並非我不想一塊兒寫,而是由於jdk將time和date分開了,同上面的LocalTime,日期的操做在LocalDate類裏,屬性、方法和LocalTime大同小異,固然多了一些特殊的方法, 好比 LocalTime有 toSecondOfDay 返回對象在一天中對應的秒數, LocalDate中包含了getDayOfMonth(返回1-31),getDayOfYear(1-366),getDayOfWeek(1-7 monday是1) 還有一些其餘的, 好比isLeapYear(是不是閏年) lenthOfMonth(當前對象,月的天數) 同理lenthOfYear(當前年的天數 365或366) 這些api真是方便的很,基本開發就夠用了code

是否是一會Date 一會Time的都繞糊塗了?沒有?什麼?你說爲何不能2個結合起來,我只能說,小明同窗,你頗有前途: 噹噹噹當~jdk8 還有一個LocalDateTime類。。。行了,也不說了,用到了本身去查看api吧。。

其餘說明:

新Date類和Time類背後的設計原則: 不可變類 java8以前,Date類都是可變類。當咱們在多線程環境下使用它,編程人員應該確認Date對象的線程安全。Java8的Date和Time API提供了線程安全的不可變類。編程人員不用考慮併發的問題。 領域模型驅動設計方法 新的日期和時間的類別遵循「域驅動設計」。對於開發者來講,理解方法和類的功能是很容易的。 Java8中的date和time api是jodatime的做者參與開發的,實現了JSR310的所有內容。這些新的api都在包java.time下。

傳一個time包下對應的類的圖

輸入圖片說明

參考連接:java8 LocalDate LocalDateTime等時間類介紹

相關文章
相關標籤/搜索