在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包下對應的類的圖