自己写了一种算日期天数的方法,比较简洁
每四年的天数固定的,但是考虑到特殊年份,即能够被100整除但是不能被4整除的年份
先算出两个年份包含了多少个四整年,先将两个年份超出四整年的年份拿出来单独拿出来,
如2021年为2020+1;1983年为1980+3;我们可以轻易算出来1980和2020年之间的天数,因为这中间没有特殊年份。如果有特殊年份就需要-1。另外多出来的三年和一年也都是平年年份,也可以轻松算出他们的日期差,我们只需要算出1983年和2021年多出来的日子就可以了。详细代码如下:
package exam;
import java.util.Scanner;
public class part4 {
public static void main(String[] args) {
//4、控制台输入两个日期,计算两个日期之间的天数差;
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个年份");
int y1 = sc.nextInt(); //first year
System.out.println("请输入第一个月份");
int m1 = sc.nextInt(); //first month
System.out.println("请输入第一个日期");
int d1 = sc.nextInt(); //first day`
System.out.println("请输入第二个年份");
int y2 = sc.nextInt(); //second year
System.out.println("请输入第二个月份");
int m2 = sc.nextInt(); //second month
System.out.println("请输入第二个日期");
int d2 = sc.nextInt(); //second day
int yc1 = y1/4, yc2 = y2/4, ye1 = y1%4, ye2 = y2%4,k1 = y1/100,k2 =y2/100,date2=0;
if(k1%2==0){
date2 = (k2-k1+1)/2;
//分别求出y1和 y2拥有的四整年数,以及结余数
}
//k1和k2用于根据奇偶性计算特殊情况如1900,1700等特殊年份,我们多加的天数
else{
date2 = (k2-k1)/2;
}
int date1 = 1461* (yc2-yc1)-Math.abs(date2),date4=0,n1,n2,total1=d1,total2=d2,date3=0;
for(n1=1;n1<m1;n1++){ //date1为y1和y2相差的四整年中天数
switch (n1){ //按月累加最后一年的天数
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
total1+=31;
break;
case 4: case 6: case 9: case 11:
total1+=30;
break;
case 2:
if(ye1==0){
total1+=29;
}
else {
total1+=28;
}
break;
}
}
for(n2=1;n2<m2;n2++){
switch (n2){ //按月累加最后一年的天数
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
total2+=31;
break;
case 4: case 6: case 9: case 11:
total2+=30;
break;
case 2:
if(ye2==0){
total2+=29;
}
else {
total2+=28;
}
break;
}
}
if(ye1==0){ //如果最后一年为闰年,我们就多算了,因为最后一年还没过完,要减去366
total1-=366;
}
else{
ye1-=1; //如果最后一年是平年,我们同理就要减去365天
}
if(ye2==0){
total2-=366;
}
else{
ye2-=1;
}
date3 = total2-total1;
date4= Math.abs( date1+date3+(ye2-ye1)*365);
System.out.println(y1+"年"+m1+"月"+d1+"天和"+y2+"年"+m2+"月"+d2+"相差"+date4+"天");
}
}
在这里插入代码片
``