假设今日是2015年3月1日,星期日,请算出13个月零6天后是星期几,距离现在多少天

这篇文章描述了一个Java程序,用于计算从2015年3月1日开始,经过13个月零6天后的星期,涉及闰年的特殊处理。

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

问题: 假设今日是2015年3月1日,星期日,请算出13个月零6天后是星期几,距离现在多少天

思路

在这里插入图片描述
这代码只针对这个问题指定的年份天数,如果要测试其他日期,就需要修改更多的逻辑。

代码:

在这里插入图片描述
2016年是闰年,2月份29天。
2015-3-1 ~~ 2016-3-1 ,包含了闰年的2月,所以12个月的天数为366天
在这里插入图片描述

在这里插入图片描述

结果

在这里插入图片描述

源代码

package cn.ljh.algorithmic;

/**
 * author JH
 * <p>
 * 问题:
 * 假设今日是2015年3月1日,星期日,请算出13个月零6天后是星期几,距离现在多少天---2016-4-7 星期四
 * <p>
 * 思路:
 * <p>
 * 这个程序只针对这个日期和相隔日期计算,如果是随机的话,需要计算的地方就有很多
 * <p>
 * 2015-3-1 -- 2016-4-7
 * 2015-3-1 -- 2016-3-1 = 12个月 =  366天 ; 2016年是闰年,2月是29天
 * 366 + 三月份的天数 31 = 397 ; 因为3月份已经过完了,2016-3-1 -- 2016-4-1 = 31天
 * 397 + 6天 = 403 ; 再加上相隔的天数--6天
 */


public class Demo06
{
    //基础数据:

    public static String[] week = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
    public static int i = 0;
    // 普通年的各月份天数
    public static int[] monthday1 = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    // 闰年的各月份天数
    public static int[] monthday2 = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    // 计算距离当前天数的差值,参数1、2、3:此时的年、月、日, 参数4、5:相隔的月份和天数
    public static String distance(int year, int month, int day, int newMonth, int newDay)
    {
        int sum = 0; //设定初始距离天数

        //判断当前月份 + 相隔月份 是否 跨年。
        if (month + newMonth >= 12)
        {
            // 跨年,判断 当前年份+1 是否为闰年。
            // 判断条件:1、年份能够被4整除,但不能被100整除; 2、年份能够被400整除。满足其中一个条件即为闰年
            if (((year + 1) % 4 == 0 && (year + 1) % 100 != 0) || (year + 1) % 400 == 0)
            {
                //因为是相隔13个月06天,2023年3月1日--2024-4-7, 先算2015-3-1 -- 2016-3-1 = 12个月 =  366天 ; 2016年是闰年,2月是29天
                //这里直接把整年的天数加上去,再加相隔的天数6天
                sum += 366 + newDay;
                //13-12=1 ,还有一个月,这个月是2016-3-1 ~ 2016-4-1 ,所以4月份还没过完,三月份已经过完了,所以是从计算三月份的天数开始的
                for (int i = 0; i < newMonth - 12; i++)
                {
                    //所以计算的月份是从3月份开始的
                    int num = monthday2[month + i];
                    sum += num;
                }
            } else
            {
                //跨年,当前年份+1 不是 闰年。
                sum += 365 + newDay;
                for (int i = 0; i < newMonth - 12; i++)
                {
                    sum += monthday1[month + i];
                }
            }
        } else
        {
            //没有跨年
            for (int i = 0; i < newMonth; i++)
            {
                sum += monthday1[month + i];
            }
            sum += newDay;
        }
        //因为1号是星期日,所以直接取模就可以了,如果是其他星期,则需要另外计算。
        return "距离天数:" + sum + ";  " + week[sum % 7];
    }

    public static void main(String[] args)
    {
        String week = distance(2015, 3, 1, 13, 6);
        System.err.println(week);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值