天天看點

Java8 特性-新時間日期 APILocalDate、LocalTime、LocalDateTimeInstant 時間戳Duration 和 Period日期的操縱 解析與格式化時區的處理與傳統日期類的轉換Date轉換為LocalDateTimeLocalDateTime轉換為Date

LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime 類的執行個體是不可變的對象,分别表示使用 ISO-8601月曆系統的日期、時間、日期和時間。它們提供了簡單的日期或時間,并不包含目前的時間資訊。也不包含與時區相關的資訊。

Java8 特性-新時間日期 APILocalDate、LocalTime、LocalDateTimeInstant 時間戳Duration 和 Period日期的操縱 解析與格式化時區的處理與傳統日期類的轉換Date轉換為LocalDateTimeLocalDateTime轉換為Date
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 的實作。例如擷取下個周日

Java8 特性-新時間日期 APILocalDate、LocalTime、LocalDateTimeInstant 時間戳Duration 和 Period日期的操縱 解析與格式化時區的處理與傳統日期類的轉換Date轉換為LocalDateTimeLocalDateTime轉換為Date

解析與格式化

java.time.format.DateTimeFormatter 類:該類提供了三種格式化方法:

預定義的标準格式

語言環境相關的格式

自定義的格式

時區的處理

Java8 中加入了對時區的支援,帶時區的時間為分别為:

ZonedDate、ZonedTime、ZonedDateTime其中每個時區都對應着ID,地區ID都為“{區域}/{城市}”的格式例如:Asia/Shanghai 等ZoneId:該類中包含了所有的時區資訊

getAvailableZoneIds() : 可以擷取所有時區時區資訊of(id) : 用指定的時區資訊擷取ZoneId 對象

與傳統日期類的轉換

Java8 特性-新時間日期 APILocalDate、LocalTime、LocalDateTimeInstant 時間戳Duration 和 Period日期的操縱 解析與格式化時區的處理與傳統日期類的轉換Date轉換為LocalDateTimeLocalDateTime轉換為Date

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

上一篇: C#小結
下一篇: C#階段小結