函数iint getDayOfMonth()是获取当前日期的日,而LocalDate plusDays(int n)和LocalDate miusDays(int n)是生成当前日期之后或之前n天的日期。但为什么对当前的日期调用这两个函数并分别+1、-1,得到的却是下图中的这四个结果。


函数iint getDayOfMonth()是获取当前日期的日,而LocalDate plusDays(int n)和LocalDate miusDays(int n)是生成当前日期之后或之前n天的日期。但为什么对当前的日期调用这两个函数并分别+1、-1,得到的却是下图中的这四个结果。


关注引自免费微信小程序:皆我百晓生
看起来你在尝试使用Java的java.time.LocalDate类来操作日期,并且遇到了一些预期之外的结果。让我们一步一步地分析这个问题。
首先,我们来回顾一下LocalDate plusDays(int n)和LocalDate minusDays(int n)方法的工作原理。这两个方法会返回一个新的LocalDate对象,这个新对象代表的是原始日期加上或减去指定数量的天数。在处理边界情况时,比如加上或减去的天数使得日期超出了当月的最大天数,那么这些方法会自动调整到正确的月份末尾或月初。
现在来看你的代码片段:
import java.time.LocalDate;
public class CalendarTest {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println("今天是" + date.getDayOfMonth() + "号");
System.out.println(date.plusDays(daysToAdd: date.getDayOfMonth() + 1));
System.out.println(date.plusDays(daysToAdd: date.getDayOfMonth() - 1));
System.out.println(date.minusDays(daysToSubtract: date.getDayOfMonth() + 1));
System.out.println(date.minusDays(daysToSubtract: date.getDayOfMonth() - 1));
}
}
问题出在你没有定义变量daysToAdd和daysToSubtract,这是语法错误。你应该直接传递给plusDays()和minusDays()方法你需要加减的天数。修改后的代码应该是这样的:
import java.time.LocalDate;
public class CalendarTest {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println("今天是" + date.getDayOfMonth() + "号");
System.out.println(date.plusDays(date.getDayOfMonth()));
System.out.println(date.minusDays(date.getDayOfMonth()));
}
}
运行这段修改后的代码,你会得到预期的结果。但是,如果你仍然想要得到你提到的图中的输出(即:2024-05-05, 2024-05-03, 2024-03-30, 2024-05-18),这是因为你在计算应该加减多少天时使用了当天的日期。这会导致一些意想不到的结果,特别是当输入的日期接近月底时。
为了得到你期望的结果,你应该传递1作为参数,而不是使用getDayOfMonth()方法获取当前日期。下面是修复后的代码:
import java.time.LocalDate;
public class CalendarTest {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println("今天是" + date.getDayOfMonth() + "号");
System.out.println(date.plusDays(1));
System.out.println(date.minusDays(1));
}
}
现在,这段代码将正确地打印出当前日期后一天和前一天的日期。如果你想要更复杂的行为,比如根据当前日期的值来决定加减的天数,你需要提供一个明确的逻辑来进行计算。