如何将用户输入的年月日值传入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
相关产品推荐
相关产品推荐

