Java 8 新的日期相关 API

新的时间和日期 API

LocalDate、LocalTime

使用 of 方法创建实例,静态不可变对象

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 对象组成。

LocalDateTime

合并了 LocalDate 和 LocalTime,可以从 LocalDateTime 中分离出 LocalDateLocalTime 对象

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 对象。

方法名 描述
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);
}
复制代码

功能:获取下一年的日期时间对象。

DateTimeFormatter

  • 静态常量,预定义的格式
  • ofPattern 指定格式

猜你喜欢

转载自juejin.im/post/5ce2b7f8f265da1bcc19149d