LocalDate、LocalTime、LocalDateTime
LocalDate、LocalTime、LocalDateTime 類的執行個體是不可變的對象,分别表示使用 ISO-8601月曆系統的日期、時間、日期和時間。它們提供了簡單的日期或時間,并不包含目前的時間資訊。也不包含與時區相關的資訊。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL51ERPBTVU1kMNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwEzNwMDMxUTM5EjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
public static void main(String[] args) {
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate1 = LocalDate.of(2018, 1, 9);
LocalTime localTime1 = LocalTime.of(23, 1, 9);
LocalDateTime localDateTime1 = LocalDateTime.of(2018, 1, 9, 23, 1, 9);
localDate.isLeapYear();
Period until = localDate.until(localDate);
}
Instant 時間戳
用于“時間戳”的運算。它是以Unix元年(傳統的設定為UTC時區1970年1月1日午夜時分)開始所經曆的描述進行運算。
Duration 和 Period
- Duration:用于計算兩個“時間”間隔
- Period:用于計算兩個“日期”間隔
日期的操縱
TemporalAdjuster : 時間校正器。有時我們可能需要擷取例如:将日期調整到“下個周日”等操作。TemporalAdjusters : 該類通過靜态方法提供了大量的常用TemporalAdjuster 的實作。例如擷取下個周日
解析與格式化
java.time.format.DateTimeFormatter 類:該類提供了三種格式化方法:
預定義的标準格式
語言環境相關的格式
自定義的格式
時區的處理
Java8 中加入了對時區的支援,帶時區的時間為分别為:
ZonedDate、ZonedTime、ZonedDateTime其中每個時區都對應着ID,地區ID都為“{區域}/{城市}”的格式例如:Asia/Shanghai 等ZoneId:該類中包含了所有的時區資訊
getAvailableZoneIds() : 可以擷取所有時區時區資訊of(id) : 用指定的時區資訊擷取ZoneId 對象
與傳統日期類的轉換
Date轉換為LocalDateTime
方法1
将Date轉換為LocalDatetime,我們可以使用以下方法:
- 從日期擷取ZonedDateTime并使用其方法toLocalDateTime()擷取LocalDateTime
- 使用LocalDateTime的Instant()工廠方法
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
System.out.println("Date = " + date);
System.out.println("LocalDateTime = " + localDateTime);
}
}
方法2
使用LocalDateTime.FactoryInput進行轉換
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), zoneId);
LocalDateTime轉換為Date
要将LocalDateTime轉換回java.util.Date,我們可以使用以下步驟:
- 使用atZone方法将LocalDateTime轉換為ZonedDateTime
- 将ZonedDateTime轉換為Instant,并從中擷取Date
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
public class Test {
public static void main(String[] args) {
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
Date date = Date.from(zdt.toInstant());
System.out.println("LocalDateTime = " + localDateTime);
System.out.println("Date = " + date);
}
}
LocalDateTime = 2020-06-22T19:33:56.147
Date = Fri Jun 22 19:33:56 CST 2020