算法哥 2024-04-17 19:59 采纳率: 75%
浏览 6
已结题

plusDays和miusDays结果返回问题

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

img

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-17 19:59
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试使用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));
        }
    }
    

    问题出在你没有定义变量daysToAdddaysToSubtract,这是语法错误。你应该直接传递给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));
        }
    }
    

    现在,这段代码将正确地打印出当前日期后一天和前一天的日期。如果你想要更复杂的行为,比如根据当前日期的值来决定加减的天数,你需要提供一个明确的逻辑来进行计算。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月17日
  • 创建了问题 4月17日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22