Java如何修改LocalDate和LocalTime对象的值?

修改LocalDate、LocalTime或LocalDateTime对象的值的最简单方法是使用相应对象的with()方法。这些方法将返回对象的修改版本,它不会更改原始对象的属性。LocalDate对象的所有方法,如withYear()、withDayOfMonth()或with(ChronOfField),都将返回一个具有修改属性的新对象。

对于 LocalTime 对象,您可以使用 withHour ()、 withMinute ()、 withSecond ()或更通用的 ChronoField 方法来修改 LocalTime 对象的属性。还可以使用这些函数和()方法修改 LocalDateTime 对象。让我们看看下面代码片段中的示例。

package org.nhooo.example.datetime;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.temporal.ChronoField;

public class ManipulatingDateTime {
    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2020, 4, 21);
        System.out.println("date1 = " + date1);
        LocalDate date2 = date1.withYear(2019);
        System.out.println("date2 = " + date2);
        LocalDate date3 = date2.withDayOfMonth(10);
        System.out.println("date3 = " + date3);
        LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 12);
        System.out.println("date4 = " + date4);

        LocalTime time1 = LocalTime.of(1, 5, 10);
        System.out.println("time1 = " + time1);
        LocalTime time2 = time1.withHour(6);
        System.out.println("time2 = " + time2);
        LocalTime time3 = time2.withMinute(45);
        System.out.println("time3 = " + time3);
        LocalTime time4 = time3.with(ChronoField.SECOND_OF_MINUTE, 25);
        System.out.println("time4 = " + time4);

        LocalDate now1 = LocalDate.now();
        System.out.println("now1 = " + now1);
        LocalDate now2 = now1.plusWeeks(1);
        System.out.println("now2 = " + now2);
        LocalDate now3 = now2.minusMonths(2);
        System.out.println("now3 = " + now3);
        LocalDate now4 = now3.plus(15, ChronoUnit.DAYS);
        System.out.println("now4 = " + now4);
    }
}

此代码段的输出为:

date1 = 2020-04-21
date2 = 2019-04-21
date3 = 2019-04-10
date4 = 2019-12-10
time1 = 01:05:10
time2 = 06:05:10
time3 = 06:45:10
time4 = 06:45:25
now1 = 2020-04-21
now2 = 2020-04-28
now3 = 2020-02-28
now4 = 2020-03-14

这些 with ()方法是 get ()方法的副本。Get ()方法将为您提供相应的 LocalDate 或 LocalTime 属性的值,而 with ()方法将更改属性值并返回一个新对象。它没有调用 set,因为对象是不可变的,这意味着它的值不能更改。

使用with()方法可以以绝对方式更改日期时间属性的值,而使用plus()或minus()方法可以帮助以相对方式更改日期和时间属性。plus()和minus()方法允许您将时间向后或向前移动给定的时间量,由一个数字加上一个TemporalUnit定义,在本例中,我们使用实现此接口的ChronoUnit枚举。