方法一:
核心思想:
计算出每一个年月日距离公元元年的天数,然后对两个天数进行差运算;即可求得两个年月日之间的天数间隔,周数=间隔天数/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);
}
}
}
程序运行结果:
写在最后:方法不止一种,如果大家有什么好的想法和意见,就评论区留言评论,欢迎大家积极评论