📅  最后修改于: 2023-12-03 15:16:24.300000             🧑  作者: Mango
LocalDateTime
是 Java 中的一个日期时间类,用于表示一个不带时区的日期时间,其内部维护了年月日时分秒这些信息。而 with()
方法是 LocalDateTime
类中的一个修饰方法,用于在不更改原有对象的情况下获得一个新的对象,从而修改日期时间的某些属性。该方法实现了不可变性,不会改变原有对象的值,是函数式编程和不可变对象的一个典型案例。
LocalDateTime with(TemporalAdjuster adjuster)
adjuster
: 一个 TemporalAdjuster
类型的对象,表示调整 LocalDateTime
对象的方式。TemporalAdjuster
是一个函数式接口,用于实现时间调整逻辑。
LocalDateTime
对象。该方法会返回一个全新的 LocalDateTime
对象,其年月日时分秒等属性将会根据 adjuster
参数进行调整。
LocalDateTime now = LocalDateTime.now();
LocalDateTime newDateTime = now.withYear(2022);
System.out.println("原日期时间:" + now); // 原日期时间:2021-10-14T19:30:24.819556
System.out.println("新日期时间:" + newDateTime); // 新日期时间:2022-10-14T19:30:24.819556
LocalDateTime now = LocalDateTime.now();
LocalDateTime newDateTime = now.withMonth(12);
System.out.println("原日期时间:" + now); // 原日期时间:2021-10-14T19:30:24.819556
System.out.println("新日期时间:" + newDateTime); // 新日期时间:2021-12-14T19:30:24.819556
LocalDateTime now = LocalDateTime.now();
LocalDateTime newDateTime = now.withDayOfMonth(25);
System.out.println("原日期时间:" + now); // 原日期时间:2021-10-14T19:30:24.819556
System.out.println("新日期时间:" + newDateTime); // 新日期时间:2021-10-25T19:30:24.819556
LocalDateTime now = LocalDateTime.now();
LocalDateTime newDateTime = now.withHour(9);
System.out.println("原日期时间:" + now); // 原日期时间:2021-10-14T19:30:24.819556
System.out.println("新日期时间:" + newDateTime); // 新日期时间:2021-10-14T09:30:24.819556
LocalDateTime now = LocalDateTime.now();
LocalDateTime newDateTime = now.withMinute(40);
System.out.println("原日期时间:" + now); // 原日期时间:2021-10-14T19:30:24.819556
System.out.println("新日期时间:" + newDateTime); // 新日期时间:2021-10-14T19:40:24.819556
LocalDateTime now = LocalDateTime.now();
LocalDateTime newDateTime = now.with(temporal -> {
int year = temporal.get(ChronoField.YEAR);
int month = temporal.get(ChronoField.MONTH_OF_YEAR);
int dayOfMonth = temporal.get(ChronoField.DAY_OF_MONTH);
int hour = temporal.get(ChronoField.HOUR_OF_DAY);
int minute = temporal.get(ChronoField.MINUTE_OF_HOUR);
int second = temporal.get(ChronoField.SECOND_OF_MINUTE);
LocalDateTime modifiedDateTime = LocalDateTime.of(year, month, dayOfMonth, hour, minute, second);
modifiedDateTime = modifiedDateTime.plusDays(1);
modifiedDateTime = modifiedDateTime.withHour(12);
return modifiedDateTime;
});
System.out.println("原日期时间:" + now); // 原日期时间:2021-10-14T19:30:24.819556
System.out.println("新日期时间:" + newDateTime); // 新日期时间:2021-10-15T12:30:24.819556
上述代码中,自定义了 TemporalAdjuster
对象,在其 with()
方法中使用了多次的链式调用,实现了自定义的时间调整逻辑。