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枚举。