一、jsr310規範
Java SE 8中引入了一個新的日期和時間API——jsr310,其設計旨在提高用於日期和時間操作的類的易用性和可讀性。jsr310日期和時間API提供了新的類來表示具體的地區日期時間(例如LocalDate、LocalTime、LocalDateTime、ZonedDateTime、OffsetDateTime、OffsetTime和Duration)以及日期時間對象之間的操作方法。在此之前的Java日期和時間API使用起來非常不直觀,也不便於擴展和修改。而jsr310規範則根據ISO標準定義了一個更加通用和易於理解的日期和時間API。
在jsr310規範中,一些公共模式被抽象為「Temporal」接口的一些方法,比如LocalDate和ZonedDateTime都實現了Temporal接口。它們使用這些公共方法來提供通用的實現,並通過自身的方法對特定類型的日期時間進行了實現。比如,LocalDate實現了Temproral接口的方法 plus(long,int)、minus(long,int)等。
此外,jsr310還針對一些常見日期和時區的問題提供了解決方案,如時區偏移量、閏秒、累加秒和毫秒到時間和日期對象等,這些都讓jsr310成為Java豐富的日期和時間API中的一個重要部分。
二、jsr310 enable handling
在jsr310規範中提供的日期和時間API支持無縫地處理時區、閏秒和夏令時等問題。它通過ZoneId和ZoneOffset兩個對象來表示時區信息,並且提供了一些方法來處理這些對象,例如withZoneSameInstant()和withZoneSameLocal()方法等。
在處理時區的同時,jsr310還提供了對閏秒的支持,它通過Duration.appendSeconds(long)和Instant.plusSeconds(long)等方法來處理秒的累加問題。此外,jsr310還允許與時區相關的偏移量與日期時間組合來創建OffsetDateTime和OffsetTime對象來表示與UTC偏移數。
除此之外,jsr310還提供了用於添加和解析符合ISO格式協調世界時的Date-Time字符串以及Java時間和日期API之間的轉換的標準方法。這些轉換可以通過java.time.format.DateTimeFormatter和java.time.Period類型來實現。
三、jsr310:date api
以下是幾個jsr310中比較重要的日期時間類的介紹。
1. LocalDate類
該類表示一個ISO-8601格式的日期,如「2018-12-18」。它是一種本地日期,不包含時區或偏移量信息。該類提供了一些方法來處理日期和時間。
public final class LocalDate implements Temporal, TemporalAdjuster, ChronoLocalDate, Serializable {
//獲取年份
public int getYear()
//獲取月份
public int getMonthValue()
//獲取日
public int getDayOfMonth()
//增加或減少一個天數
public LocalDate plusDays(long daysToAdd)
}
2. LocalTime類
該類表示一個ISO-8601格式的時間,如「23:01:30.001」。它是一種本地時間,不包含時區或偏移量信息。該類提供了一些方法來處理時間和日期。
public final class LocalTime implements Temporal, TemporalAdjuster, Serializable, Comparable {
//獲取時鐘
public int getHour()
//獲取分鐘
public int getMinute()
//獲取秒
public int getSecond()
//獲取毫秒
public int getNano()
//增加或減少分鐘
public LocalTime plusMinutes(long minutesToAdd)
}
3. LocalDateTime類
該類代表一個日期和時間,如「2018-12-18T23:01:30.001」。它是一種不帶時區的ISO-8601格式的日期時間類型。
public final class LocalDateTime implements Temporal, TemporalAdjuster, Serializable, Comparable, ChronoLocalDateTime {
//獲取日期
public LocalDate toLocalDate()
//獲取時間
public LocalTime toLocalTime()
//獲取給定年的DateTime
public static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second)
}
4. ZonedDateTime類
該類代表一個帶時區偏移量的日期和時間,如「2018-12-18T23:01:30.001+08:00[Asia/Shanghai]」。它是一種ISO-8601格式的日期時間,帶有時區偏移量和時區信息。
public final class ZonedDateTime implements Temporal, ChronoZonedDateTime {
//獲取所述時區的時鐘規則
public ZoneRules getZoneRules()
//返回指定時區的時間日期
public ZonedDateTime withZoneSameInstant(ZoneId zone)
}
5. Duration類
該類代表一段時間長度,可以用於處理各種時間單位,如日、秒、毫秒等。Duration類和Period類對日期和時間進行了不同的處理。
public class Duration implements TemporalAmount, Serializable, Comparable {
//獲取天數
public long toDays()
//獲取小時數
public long toHours()
//獲取秒數
public long getSeconds()
//增加duration
public Duration plus(Duration duration)
}
以上是jsr310一些重要的日期時間類的介紹和常用方法的解釋。其中,jsr310日期時間API具有很好的可讀性和易用性,可大大簡化代碼邏輯和開發人員的工作。
原創文章,作者:KUCGK,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/360869.html