Java8新特性之新世間與日期

接口中的默認方法與靜態方法

Java 8中允許接口中包含具有具體實現的方法,該方法稱為“默認方法”,默認方法使用 default 關鍵字修飾。

default String getName(){
return "呵呵呵";
}

接口默認方法的”類優先”原則

若一個接口中定義了一個默認方法,而另外一個父類或接口又定義了一個同名的方法時。選擇父類中的方法。如果一個父類提供了具體的實現,默認使用父類的方法

接口衝突。如果一個父接口提供一個默認方法,而另一個接口也提供了一個具有相同名稱和參數列表的方法(不管方是否是默認方法),那麼必須覆蓋該方法來解決衝突(選擇採取那個接口的方法實現)



新時間日期

使用 LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime 類的實例是不可變的對象(線程安全),分別表示使用 ISO-8601日曆系統的日期、時間、日期和時間。

Java8新特性之新世間與日期

Java8新特性之新世間與日期


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);

輸出樣式

Java8新特性之新世間與日期


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>

與傳統日期處理的轉換

Java8新特性之新世間與日期

Java8新特性之新世間與日期



重複註解與類型註解

Java 8對註解處理提供了兩點改進:可重複的註解及可用於類型的註解

Java8新特性之新世間與日期


分享到:


相關文章: