随便写写

自己写了一种算日期天数的方法,比较简洁
每四年的天数固定的,但是考虑到特殊年份,即能够被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+"天");


    }
}

在这里插入代码片
``
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值