Java 8 新的日期相關 API

新的時間和日期 API

LocalDate、LocalTime

使用 of 方法建立實例,靜態不可變對象java

LocalDate localDate = LocalDate.of(2019, 5, 20); // 建立 LocalDate 對象
LocalTime localTime = LocalTime.of(22, 5, 23);  // 建立 LocalTime 對象 
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);  // 使用 LocalDate 和 LocalTime 建立 LocalDateTime 對象
LocalDateTime localDateTime1 = LocalDateTime.of(2019, 5, 20, 22, 22, 33);  // 根據指定日期時間建立 LocalDatetime 建立 LocalDateTime 對象
複製代碼

LocalDateTime 對象由 LocalDate 對象 和 LocalTime 對象組成。spa

LocalDateTime

合併了 LocalDate 和 LocalTime,能夠從 LocalDateTime 中分離出 LocalDateLocalTime 對象code

LocalDate localDate = localDateTime.toLocalDate();
LocalTime localTime = localDateTime.toLocalTime();
複製代碼

日期運算(加、減)

LocalDateTime localDateTime = localDateTime.plusYears(1);
LocalDateTime localDateTime = localDateTime.plusYears(1);
LocalDateTime localDateTime = localDateTime.plusDays(1);
LocalDateTime localDateTime = localDateTime.plusWeeks(1);
LocalDateTime localDateTime = localDateTime.plusHours(1);
LocalDateTime localDateTime = localDateTime.plusMinutes(1);
LocalDateTime localDateTime = localDateTime.plusSeconds(1);
LocalDateTime localDateTime = localDateTime.plusMinutes(1);
LocalDateTime localDateTime = localDateTime.plusNanos(1);
複製代碼

Instant 時間戳

Duration 、 Period

方法名 是否靜態方法 方法描述
between 建立兩個時間點之間的 interval
from 由一個臨時時間點建立interval
of 由它的組成部分建立 interval 的實例
parse 由字符串建立 interval 的實例
addTo 建立該 interval 的副本,並將其疊加到某個指定的 temporal 對象
get 讀取該 interval 的狀態
isNegative 檢查該 interval 是否爲負值,不包含零
isZero 檢查該 interval 的時長是否爲零
miuns 經過減去必定的時間建立該 interval 的副
multipliedBy 將 interval 的值乘以某個標量建立該 interval 的副本
negated 以忽略某個時長的方式去建立該 interval 的副本
plus 以增長某個指定的時長的方式建立該 interval 的副本
subtractFrom 從指定的 termporal 對象中減去該 interval

操縱、解析和格式化日期

方法名 是不是靜態方法 描述
from 依據傳入的 Temporal 對象建立對象實例
now 依據系統時鐘建立 Temporal 對象
of 由 Temporal 對象的某個部分建立該對象的實例
parse 由字符串建立 Temporal 對象的實例
atOffset 由字符串建立 Temporal 對象的實例
atZone 將 Temporal 對象和某個時區相結合
format 使用某個指定的格式器,將 Temporal 對象轉換成爲字符串
get 讀取 Temporal 對象的某一部分的值
minus 建立 Temporal 對象的一個副本,經過將當前 Temporal 對象的值減去必定的時長建立該副本
plus 建立 Temporal 對象的一個副本,經過將當前 Temporal 對象的值加上必定的時長建立該副本
with 以該 Temporal 對象爲模板,對某些狀態進行修改建立該對象的副本

TemporalAdjuster

進行更加複雜的操做,能夠使用重載版本的 with 方法傳遞一個更多定製化的 TemporalAdjuster 對象。orm

方法名 描述
dayOfWeekInmonth 建立一個新的日期,它的值爲同一個月中每一週的第幾天
firstDayOfMonth 建立一個新的日期,它的值爲當月的第一天
firstDayOfNextMonth 建立一個新的日期,它的值爲下月的第一天
firstDayOfNextYear 建立一個新的日期,它的值爲明年的第一天
firstDayOfYear 建立一個新的日期,它的值爲當年的第一天
firstInMonth 建立一個新的日期,它的值爲同一個月中,第一個符合星期幾要求的值
lastDayOfMonth 建立一個新的日期,它的值爲下月的最後一天
lastDayOfNextMonth 建立一個新的日期,它的值爲下月的最後一天
lastDayofNextYear 建立一個新的日期,它的值爲明年的最後一天
lastDayOfYear 建立一個新的日期,它的值爲今年的最後一天
lastInMonth 建立一個新的日期,它的值爲同一個月中,最後一個符合星期幾要求的值
next/previous 建立一個新的日期,並將其設定爲日期調整後或者調整前,前一個符合指定星期幾要求的日期
nextOrSame/previousOrSame 建立一個新的日期,並將其值設定爲日期調整後或者調整前,第一個符合指定星期幾要求的日期,若是該日期已經符合要求,直接返回該對象

以上 JDK 提供的仍然沒法知足要求,能夠建立本身的 TemporalAdjuster對象

@FunctionalInterface
public interface TemporalAdjuster {
    Temporal adjustInto(Temporal temporal);
}
複製代碼

實現 TemporalAdjuster 接口,而後在 adjustInto 方法中實現本身的邏輯。接口

自定義的 TemporalAdjuster 實現

public void testTemporalAdjuster() {
  LocalDateTime now = LocalDateTime.now();
  LocalDateTime nextYear = now.with((t) -> t.plus(1, ChronoUnit.YEARS));

  String format = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
  System.out.println(format);

  String format1 = nextYear.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
  System.err.println(format1);
}
複製代碼

功能:獲取下一年的日期時間對象。ip

DateTimeFormatter

  • 靜態常量,預約義的格式
  • ofPattern 指定格式
相關文章
相關標籤/搜索