新的时间和日期 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
中分离出 LocalDate
和 LocalTime
对象
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 指定格式