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 指定格式
相关文章
相关标签/搜索