Java 星系炸弹

该博客提供了一个Java方法来计算X星系中设定特定天数后爆炸的炸弹的准确爆炸日期。例如,给定一个2014年11月9日放置,设定为1000天的贝塔炸弹,程序将计算其爆炸日期。通过使用`Calendar`类进行日期加法操作,可以得出爆炸日期。此外,博客还包含了一种备用的日期计算方法,但未在最终代码中使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

星系炸弹
在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期

解题

    /**
     * 星系炸弹
     * 在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
     *
     * 每个炸弹都可以设定多少天之后爆炸。
     *
     * 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
     *
     * 有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期
     * @param dateStr
     * @param addDays
     */
    public static void calculateDateAdditions(String dateStr, int addDays) throws ParseException {
        // 定义正则校验输入
        String regex = "\\d{4}[-]{1}\\d{2}[-]{1}\\d{2}";
        if (!dateStr.matches(regex)){
            System.out.println("时间输入格式不匹配  正确格式类似于 2022-07-13");
            return;
        }else{
            if (addDays < 0){
                System.out.println("天数不能小于 0");
                return;
            }
            // 正常开始计算
            // calendar 计算
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Date parseDate = dateFormat.parse(dateStr);
            Calendar instance = Calendar.getInstance();
            instance.setTime(parseDate);

            instance.add(Calendar.DAY_OF_MONTH, addDays);

            System.out.println(instance.get(Calendar.YEAR)+" " + (instance.get(Calendar.MONTH) + 1)+ " " + instance.get(Calendar.DAY_OF_MONTH));
            
            // 普通计算  使用一种即可
//            String[] split = dateStr.split("-");
//            Integer year = Integer.valueOf(split[0]);
//            Integer mouth = Integer.valueOf(split[1]);
//            Integer day = Integer.valueOf(split[2]);
//
//            int[] mouthDay = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//
//            for (int i = 0; i < addDays; i++ ) {
//                // 当前年
//                if (year % 4 == 0 || year % 400 == 0){
//                    mouthDay[1] = 29;
//                }else{
//                    mouthDay[1] = 28;
//                }
//
//                // 每次循环天数+1 月满了进入下一个月, 日重置
//                day++;
//                if (day > mouthDay[mouth-1]){
//                    day = 1;
//                    mouth++;
//                }
//                // 年满了进入下一年  月重置
//                if (mouth > 12){
//                    mouth = 1;
//                    year++;
//                }
//            }
//            System.out.println(year + " " + mouth + " " + day);

        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值