Java中如何通过Scanner接收日期输入并实现日/月/年加减操作
Java日期加减操作实现方法
方案1:基于你现有代码的Calendar类实现(适配旧版JDK)
你现有的代码已经把输入的字符串解析为Date类型对象,接下来可以通过Calendar类完成年月日的加减操作,示例代码如下:
import java.util.Calendar; import java.util.Date; import java.util.Scanner; import java.text.ParseException; import java.text.SimpleDateFormat; public class DateCalc { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Date: "); String date = scanner.next(); SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); Date date2=null; try { date2 = dateFormat.parse(date); } catch (ParseException e) { e.printStackTrace(); } // 日期加减逻辑 Calendar calendar = Calendar.getInstance(); calendar.setTime(date2); // 加3天,负数代表减,正数代表加 calendar.add(Calendar.DAY_OF_MONTH, 3); // 减2个月 calendar.add(Calendar.MONTH, -2); // 加1年 calendar.add(Calendar.YEAR, 1); // 转换为Date对象可后续业务使用 Date resultDate = calendar.getTime(); // 格式化输出验证 System.out.println("计算后的日期:" + dateFormat.format(resultDate)); } }
方案2:Java 8+推荐使用java.time包实现(无线程安全问题,API更易用)
SimpleDateFormat和Date类存在线程安全缺陷,更推荐用新版时间API实现同等功能,示例如下:
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.Scanner; public class DateCalcNew { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Date: "); String dateInput = scanner.next(); // 定义对应格式的解析器 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy"); LocalDate localDate = LocalDate.parse(dateInput, formatter); // 日期加减操作 LocalDate resultDate = localDate .plusDays(3) // 加3天 .minusMonths(2) // 减2个月 .plusYears(1); // 加1年 // 格式化输出 System.out.println("计算后的日期:" + resultDate.format(formatter)); } }
注意事项
- 加减操作的参数为正数时是添加时间,为负数时是减少时间
- 两种方案都会自动处理跨月、跨年的边界场景,比如1月减1个月自动变为上一年的12月
内容的提问来源于stack exchange,提问作者brae
相关产品推荐
相关产品推荐

