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