设计方法,计算两个日期之间相差多少天。两个日期的年月日由参数控制.

import java.util.Scanner;
public class work05 {
    //闰年
  final static int LEAP_YEAR=366;
  //平年
  final static int COMMEN_YEAR=365;

  //月份数组 ,默认是平年,具体操作在下方代码71行
   static int days[]={31,28,31,30,31,30,31,31,30,31,30,31};

    public static void main(String[] args) {
        //设计方法,计算两个日期之间相差多少天。两个日期的年月日由参数控制。
	//定义控制台输入对象
        Scanner scan=new Scanner(System.in);
        //定义第一个的年月日,用来构造第一个date对象
        int year1,month1,day1;
        //定义第二个的年月日,用来构造第二个date对象
        int year2,month2,day2;
        //str1,str2用来接收输入
        String str1;
        String str2;
        System.out.println("请输入第一个日期(按照XXXX.XX.XX的格式)");
        str1=scan.nextLine();
        //利用字符串分割将输入的日期划分为年月日
        String []date1=str1.split("\\.");
        //将字符串转化为整型
        year1=Integer.parseInt(date1[0]);
        month1=Integer.parseInt(date1[1]);
        day1=Integer.parseInt(date1[2]);
    //    System.out.println(year1+","+month1+","+day1);
        System.out.println("请输入第二个日期(按照XXXX.XX.XX的格式)");
        str2=scan.nextLine();
        //利用字符串分割将输入的日期划分为年月日
        String []date2=str2.split("\\.");
        //将字符串转化为整型
        year2=Integer.parseInt(date2[0]);
        month2=Integer.parseInt(date2[1]);
        day2=Integer.parseInt(date2[2]);
     //   System.out.println(year2+","+month2+","+day2);

        //初始化两个date对象。
        Date d1=new Date(year1,month1,day1);
        Date d2=new Date(year2,month2,day2);
        //计算从公元前一年一月一日到第一个日期的天数
        int sum1=sum_Days(d1);
        //计算从公元前一年一月一日到第二个日期的天数
        int sum2=sum_Days(d2);
        //两个天数相减即为相差的天数
        System.out.println(str1+"跟"+str2+"相差"+(sum1>sum2?sum1-sum2:sum2-sum1)+"天.");

    }
    static int sum_Days(Date date){
        int sum=0;
        //计算公元1年一月一日到某年的一月一日的天数
        for(int i=1;i<date.getYear();i++){
            //如果是闰年,366天
            if(i%4==0&&i%100!=0||i%400==0){
                sum+=LEAP_YEAR;
            }else
                sum+=COMMEN_YEAR;
        }
        //计算某年的一月一日到月份的天数
        for(int i=0;i<date.getMonth()-1;i++){
            sum+=days[i];
        }
        //计算该月的一号到该天的天数
        if(date.getMonth()>2&&(date.getYear()%400==0||date.getYear()%4==0&&date.getYear()%100!=0)){
            //如果本年是闰年,多加一天
            sum+=date.getDay()+1;
        }else{
            sum+=date.getDay();
        }

        return sum;
    }
    //定义一个日期类
    public static class Date{
        int year;
        int month;
        int day;
        //无参构造函数
        public Date(){}
        //带三个参数的构造函数
        public Date(int year,int month,int day){
            this.year=year;
            this.month=month;
            this.day=day;
        }
        //get,set方法
        public int getYear() {
            return year;
        }

        public void setYear(int year) {
            this.year = year;
        }

        public int getMonth() {
            return month;
        }

        public void setMonth(int month) {
            this.month = month;
        }

        public int getDay() {
            return day;
        }

        public void setDay(int day) {
            this.day = day;
        }
    }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值