java分别输入第一个年月日和第二个年月日,计算它们之间间隔的天数和周数

题目:分别输入第一个年月日和第二个年月日,计算它们之间间隔的天数和周数

方法一:

核心思想:

  计算出每一个年月日距离公元元年的天数,然后对两个天数进行差运算;即可求得两个年月日之间的天数间隔,周数=间隔天数/7

核心代码:

package homework09.homework0914;
/**
 * 分别输入第一个年月日和第二个年月日,计算它们之间间隔的天数和周数
 */
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个年月日:");
        int year1 = scanner.nextInt();
		int month1 = scanner.nextInt();
		int day1 = scanner.nextInt();
        System.out.println("请输入第二个年月日:");
		int year2 = scanner.nextInt();
		int month2 = scanner.nextInt();
		int day2 = scanner.nextInt();
		//year1距离公元元年的天数
		int sum = (year1-1)*365;
		sum += (year1-1)/4;
		//year1年month1月day1天经过多少天
		switch(month1){
		case 12:
			sum+=30;//一定经过了11月,11月的天数加上
		case 11:
			sum+=31;
		case 10:
			sum+=30;
		case 9:
			sum+=31;
		case 8:
			sum+=31;
		case 7:
			sum+=30;
		case 6:
			sum+=31;
		case 5:
			sum+=30;
		case 4:
			sum+=31;
		case 3:
			if(year1%400==0 || year1%100!=0 && year1%4==0){
				sum+=29;
			}else{
				sum+=28;
			}
		case 2:
			sum+=31;
		case 1:
			sum+=day1;
		}
		System.out.println("第一个年月日距离公元元年的天数为:"+sum);
		//year1距离公元元年的天数
		int sum2 = (year2-1)*365;
		sum2 += (year2-1)/4;
		//year1年month1月day1天经过多少天
		switch(month2){
		case 12:
			sum2+=30;//一定经过了11月,11月的天数加上
		case 11:
			sum2+=31;
		case 10:
			sum2+=30;
		case 9:
			sum2+=31;
		case 8:
			sum2+=31;
		case 7:
			sum2+=30;
		case 6:
			sum2+=31;
		case 5:
			sum2+=30;
		case 4:
			sum2+=31;
		case 3:
			if(year2%400==0 || year2%100!=0 && year2%4==0){
				sum2+=29;
			}else{
				sum2+=28;
			}
		case 2:
			sum2+=31;
		case 1:
			sum2+=day2;
		}
		System.out.println("第二个年月日距离公元元年的天数为:"+sum2);
        //判断两个天数的大小并进行计算
		if(sum>sum2){
			System.out.println("间隔的时间天数为:"+(sum-sum2));
			System.out.println("间隔的周数为:"+(sum-sum2)/7);
		}else{
			System.out.println("间隔的时间天数为:"+(sum2-sum));
			System.out.println("间隔的周数为:"+(sum2-sum)/7);
		}
    }
}

程序运行结果:

在这里插入图片描述

方法二:

核心思想:

  对两个年份之间做一个循环判断,如果有闰年,则定义一个变量来单独存储闰年多的那一天;后续的计算都可以看作是平年来计算。

核心代码:

package homework09.homework0914;
/**
 * 分别输入第一个年月日和第二个年月日,计算它们之间间隔的天数和周数
 */
import java.util.Scanner;
public class Demo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个年月日:");
        int year1=scanner.nextInt();
        int month1=scanner.nextInt();
        int day1=scanner.nextInt();

        System.out.println("请输入第二个年月日:");
        int year2=scanner.nextInt();
        int month2=scanner.nextInt();
        int day2=scanner.nextInt();

        int sum=0;//把两个年份之间闰年多的那一天单独存储起来,后续的计算都以平年来计算
        for(int i=year1;i<=year2;i++){
            if(i%400==0||(i%4==0)&&(i%100!=0)){
                sum++;
            }
        }
        int result1=0;
        switch(month1){
            case 12:result1+=30;
            case 11:result1+=31;
            case 10:result1+=30;
            case 9:result1+=31;
            case 8:result1+=31;
            case 7:result1+=30;
            case 6:result1+=31;
            case 5:result1+=30;
            case 4:result1+=31;
            case 3:result1=result1+28;
            case 2:result1+=31;
            case 1:break;
            default:System.out.println("输入错误,请重新输入!");
        }
        int result2=0;
        switch(month2){
            case 12:result2+=30;
            case 11:result2+=31;
            case 10:result2+=30;
            case 9:result2+=31;
            case 8:result2+=31;
            case 7:result2+=30;
            case 6:result2+=31;
            case 5:result2+=30;
            case 4:result2+=31;
            case 3:result2=result2+28;
            case 2:result2+=31;
            case 1:break;
            default:System.out.println("输入错误,请重新输入!");
        }
        int axe=0;//用来存天数的间隔
        int n=year2-year1;//n代表两个年份之间间隔的年数
        if(n==0){
            System.out.println((result2+day2)-(result1+day1)+"天的时间间隔");
            int m=axe/7;
            System.out.println("间隔的周数为:"+m);
        }
        else if(n==1){
            axe=(365-(result1+day1))+(result2+day2)+sum;
            System.out.println("天数间隔为:"+axe);
            int m=axe/7;
            System.out.println("间隔的周数为:"+m);
        }
        else if(n>=2){
            axe=(365-(result1+day1))+(result2+day2)+sum+(n-1)*365;
            System.out.println("天数间隔为:"+axe);
            int m=axe/7;
            System.out.println("间隔的周数为:"+m);
        }
    }
}

程序运行结果:

在这里插入图片描述
写在最后:方法不止一种,如果大家有什么好的想法和意见,就评论区留言评论,欢迎大家积极评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

faramita_of_mine

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

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

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

打赏作者

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

抵扣说明:

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

余额充值