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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:15:05