接口中的默認方法與靜態方法
Java 8中允許接口中包含具有具體實現的方法,該方法稱為“默認方法”,默認方法使用 default 關鍵字修飾。
default String getName(){
return "呵呵呵";
}
接口默認方法的”類優先”原則
若一個接口中定義了一個默認方法,而另外一個父類或接口又定義了一個同名的方法時。選擇父類中的方法。如果一個父類提供了具體的實現,默認使用父類的方法
接口衝突。如果一個父接口提供一個默認方法,而另一個接口也提供了一個具有相同名稱和參數列表的方法(不管方是否是默認方法),那麼必須覆蓋該方法來解決衝突(選擇採取那個接口的方法實現)
新時間日期
使用 LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime 類的實例是不可變的對象(線程安全),分別表示使用 ISO-8601日曆系統的日期、時間、日期和時間。
Instant 時間戳
用於“時間戳”的運算。它是以Unix元年(傳統的設定為UTC時區1970年1月1日午夜時分)開始所經歷的描述進行運算
Instant ins = Instant.now(); //默認使用 UTC 時區
System.out.println(ins);
//將時間偏移8小時
OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8));
System.out.println(odt);
//將時間轉為納秒
System.out.println(ins.getNano());
//偏移5秒
Instant ins2 = Instant.ofEpochSecond(5);
System.out.println(ins2);
輸出樣式
Duration 和 Period
Duration:用於計算兩個“時間”間隔
Instant ins1 = Instant.now();
Instant ins2 = Instant.now();
System.out.println("所耗費時間為:" + Duration.between(ins1, ins2));
Period:用於計算兩個“日期”間隔
LocalDate ld1 = LocalDate.now();
LocalDate ld2 = LocalDate.of(2011, 1, 1);
Period pe = Period.between(ld2, ld1);
日期的操縱(時間校正器)
TemporalAdjuster (接口): 時間校正器。有時我們可能需要獲取例如:將日期調整到“下個週日”等操作。
TemporalAdjusters : 該類通過靜態方法提供了大量的常用 TemporalAdjuster 的實現 。
代碼實例:
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
//將日期設為10
LocalDateTime ldt2 = ldt.withDayOfMonth(10);
System.out.println(ldt2);
//下一個週末
LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
System.out.println(ldt3);
解析與格式化
java.time.format.DateTimeFormatter 類
//使用系統的樣式格式
// DateTimeFormatter dtf = DateTimeFormatter.ISO_LOCAL_DATE;
//自定義事件輸出格式
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E");
LocalDateTime ldt = LocalDateTime.now();
String strDate = ldt.format(dtf);
System.out.println(strDate);
//將字符串轉解析為時間
LocalDateTime newLdt = LocalDateTime.parse(strDate, dtf);
System.out.println(newLdt);
時區的處理
Java8 中加入了對時區的支持,帶時區的時間為分別為:
ZonedDate、ZonedTime、ZonedDateTime
其中每個時區都對應著 ID,地區ID都為 “{區域}/{城市}”的格式例如 :Asia/Shanghai 等
ZoneId:該類中包含了所有的時區信息 ; getAvailableZoneIds() : 可以獲取所有時區時區信息 ; of(id) : 用指定的時區信息獲取 ZoneId 對象
代碼實例
//獲取上海時區的時間
LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println(ldt);
//返回帶時區信息的時間
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("US/Pacific"));
System.out.println(zdt);
//獲取所有的時區
Set<string> set = ZoneId.getAvailableZoneIds();
/<string>
與傳統日期處理的轉換
重複註解與類型註解
Java 8對註解處理提供了兩點改進:可重複的註解及可用於類型的註解。
閱讀更多 獨行者pxl 的文章