You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将用户输入的年月日值传入startDate、endDate两个对象并后续打印汇总

Java 日期对象封装与打印实现方案

前置优化说明

你现有代码中每次触发输入都重复创建Scanner实例,属于不必要的资源浪费,优化后统一使用全局Scanner实例即可。

实现逻辑

  • 调用三次输入方法分别获取开始日期的年、月、日,封装为startDate对象
  • 再次调用三次输入方法分别获取结束日期的年、月、日,封装为endDate对象
  • 推荐使用Java 8及以上版本内置的java.time.LocalDate作为日期类,无需额外引入第三方依赖
  • 按业务需求自定义格式输出两个日期的汇总信息

完整实现代码

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

public class DateProcessor {
    // 全局共用一个Scanner实例
    private Scanner input = new Scanner(System.in);

    public int promptForYear() {
        System.out.println("请输入年份,例如'2020': ");
        return input.nextInt();
    }

    public int promptForMonth() {
        System.out.println("请输入月份数字,例如'6': ");
        return input.nextInt();
    }

    public int promptForDay() {
        System.out.println("请输入日期数字,例如'21': ");
        return input.nextInt();
    }

    public static void main(String[] args) {
        DateProcessor processor = new DateProcessor();

        // 获取开始日期参数并封装对象
        System.out.println("===== 请输入开始日期 =====");
        int startYear = processor.promptForYear();
        int startMonth = processor.promptForMonth();
        int startDay = processor.promptForDay();
        LocalDate startDate = LocalDate.of(startYear, startMonth, startDay);

        // 获取结束日期参数并封装对象
        System.out.println("===== 请输入结束日期 =====");
        int endYear = processor.promptForYear();
        int endMonth = processor.promptForMonth();
        int endDay = processor.promptForDay();
        LocalDate endDate = LocalDate.of(endYear, endMonth, endDay);

        // 打印日期汇总信息,可自定义输出格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
        System.out.println("===== 日期汇总信息 =====");
        System.out.println("开始日期:" + startDate.format(formatter));
        System.out.println("结束日期:" + endDate.format(formatter));
        System.out.println("两个日期间隔天数:" + (endDate.toEpochDay() - startDate.toEpochDay()));
    }
}

注意事项

  • LocalDate.of()方法会自动校验日期合法性,如果输入不存在的日期(比如2月30日)会直接抛出异常,可按需添加捕获逻辑做输入校验
  • 如果你必须使用旧版java.util.Date类实现,可通过Calendar类设置年月日再转换为Date对象,不推荐使用旧版日期API

内容的提问来源于stack exchange,提问作者elliotSmith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:27:03