之间的日期的Java天 [英] Days Between Dates Java

查看:167
本文介绍了之间的日期的Java天的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一对夫妇日子过,当我运行该程序。什么我做错了什么建议?

我知道有一个简单的方法来做到这一点,但对于这个我想展现找到之间的天所有的实际步骤。谢谢!

 公共类DaysBetween {

    公共静态无效的主要(字串[] args){

        长months1 =的Long.parseLong(参数[0]);
        长days1 =的Long.parseLong(参数[1]);
        长YEAR1 =的Long.parseLong(参数[2]);
        长个月2 =的Long.parseLong(参数[3]);
        长days2 =的Long.parseLong(参数[4]);
        长YEAR2 =的Long.parseLong(参数[5]);

        长daysbetween = 0;
        长leapyearcounter = 0;
        布尔leapyear1 = FALSE;
        布尔leapyear2 = FALSE;
        布尔valid1 = TRUE;
        布尔valid2 = TRUE;
        INT较早= 0;

        //这个测​​试,看看哪个日期早
        如果(YEAR1 == YEAR2){
            如果(months1 ==个月2){
                如果(days1 == days2){
                    daysbetween = daysbetween;
                }否则如果(days1< days2){
                    较早= 1;
                }
            }否则如果(months1<个月2){
            较早= 1;
            }
        }否则如果(YEAR1< YEAR2){
            较早= 1;
        }

        //此切换日期取决于哪一个较早
        开关(早期){
        案例1:months1 =的Long.parseLong(参数[0]);
            days1 =的Long.parseLong(参数[1]);
            YEAR1 =的Long.parseLong(参数[2]);
            个月2 =的Long.parseLong(参数[3]);
            days2 =的Long.parseLong(参数[4]);
            YEAR2 =的Long.parseLong(参数[5]);
        打破;
        默认:
            months1 =的Long.parseLong(参数[3]);
            days1 =的Long.parseLong(参数[4]);
            YEAR1 =的Long.parseLong(参数[5]);
            个月2 =的Long.parseLong(参数[0]);
            days2 =的Long.parseLong(参数[1]);
            YEAR2 =的Long.parseLong(参数[2]);
        打破;
        }

        //这部分测试中,如果较早的日期是有效的
        如果((YEAR1%4 == 0)及及(YEAR1%100 = 0)||(YEAR1%400 == 0)!){
            leapyear1 = TRUE;
        }

        如果((leapyear1 ==真)及及(months1 == 2)){
            如果(days1&其中; = 29&安培;&安培; days1> = 1){
                valid1 = TRUE;
            }
        }否则如果((leapyear1 ==假)及及(months1 == 2)){
            如果(days1&其中; = 28&安培;&安培; days1> = 1){
                valid1 = TRUE;
            }
        }

        如果(months1!= 2){
            如果(months1&所述; 8){
                如果(months1%2​​!= 0){
                    如果(days1&其中; = 31&安培;&安培; days1> = 1){
                        valid1 = TRUE;
                    } 其他 {
                        valid1 = FALSE;
                    }
                }否则,如果(months1%2​​ == 0){
                    如果(days1&其中; = 30&安培;&安培; days1> = 1){
                        valid1 = TRUE;
                    } 其他 {
                        valid1 = FALSE;
                    }
                }
            }否则如果(months1→8){
                如果(months1%2​​!= 0){
                    如果(days1&其中; = 30&安培;&安培; days1> = 1){
                        valid1 = TRUE;
                    } 其他 {
                        valid1 = FALSE;
                    }
                }否则,如果(months1%2​​ == 0){
                    如果(days1&其中; = 31&安培;&安培; days1> = 1){
                        valid1 = TRUE;
                    } 其他 {
                        valid1 = FALSE;
                    }
                }
            }
        }

        //这部分测试中,如果日后是否有效
        如果((YEAR2%4 == 0)及及(YEAR2%100 = 0)||(YEAR2%400 == 0)!){
            leapyear2 = TRUE;
        }

        如果((leapyear2 ==真)及及(个月2 == 2)){
            如果(days2&其中; = 29&安培;&安培; days2> = 1){
                valid2 = TRUE;
            }
        }否则如果((leapyear2 ==假)及及(个月2 == 2)){
            如果(days2&其中; = 28&安培;&安培; days2> = 1){
                valid2 = TRUE;
            }
        }

        如果(个月2!= 2){
            如果(个月2&所述; 8){
                如果(个月2%2!= 0){
                    如果(days2&其中; = 31&安培;&安培; days2> = 1){
                        valid2 = TRUE;
                    } 其他 {
                        valid2 = FALSE;
                    }
                }否则,如果(个月2%2 == 0){
                    如果(days2&其中; = 30&安培;&安培; days2> = 1){
                        valid2 = TRUE;
                    } 其他 {
                        valid2 = FALSE;
                    }
                }
            }否则如果(个月2→8){
                如果(个月2%2!= 0){
                    如果(days2&其中; = 30&安培;&安培; days2> = 1){
                        valid2 = TRUE;
                    } 其他 {
                        valid2 = FALSE;
                    }
                }否则,如果(个月2%2 == 0){
                    如果(days2&其中; = 31&安培;&安培; days2> = 1){
                        valid2 = TRUE;
                    } 其他 {
                        valid2 = FALSE;
                    }
                }
            }
        }

        //这增加了一天总,如果较早的日期是在一月份和放大器;其闰年
        如果((months1 == 1)及及(leapyear1 ==真)){
            daysbetween = daysbetween +1;
        }

        //这增加了留在YEAR1月
        如果(months1 == 1){
            daysbetween = daysbetween + 334;
        }否则如果(months1 == 2){
            daysbetween = daysbetween + 306;
        }否则,如果(months1 == 3){
            daysbetween = daysbetween + 275;
        }否则,如果(months1 == 4){
            daysbetween = daysbetween + 245;
        }否则,如果(months1 == 5){
            daysbetween = daysbetween + 214;
        }否则,如果(months1 == 6){
            daysbetween = daysbetween + 184;
        }否则,如果(months1 == 7){
            daysbetween = daysbetween + 153;
        }否则,如果(months1 == 8){
            daysbetween = daysbetween + 122;
        }否则,如果(months1 == 9){
            daysbetween = daysbetween + 92;
        }否则,如果(months1 == 10){
            daysbetween = daysbetween + 61;
        }否则,如果(months1 == 11){
            daysbetween = daysbetween + 31;
        } 其他 { }

        //这增加了,如果YEAR2是闰年多一天,如果月份是3​​或更高版本
        如果((个月2> = 3)及及(leapyear2 =真)){
            daysbetween = daysbetween + 1;
        }

        //这个添加个月到一个月YEAR2
        如果(个月2 == 1){
            daysbetween = daysbetween;
        }否则,如果(个月2 == 2){
            daysbetween = daysbetween + 31;
        }否则,如果(个月2 == 3){
            daysbetween = daysbetween + 59;
        }否则,如果(个月2 == 4){
            daysbetween = daysbetween + 90;
        }否则,如果(个月2 == 5){
            daysbetween = daysbetween + 120;
        }否则,如果(个月2 == 6){
            daysbetween = daysbetween + 151;
        }否则,如果(个月2 == 7){
            daysbetween = daysbetween + 181;
        }否则,如果(个月2 == 8){
            daysbetween = daysbetween + 212;
        }否则,如果(个月2 == 9){
            daysbetween = daysbetween + 243;
        }否则,如果(个月2 == 10){
            daysbetween = daysbetween + 273;
        }否则,如果(个月2 == 11){
            daysbetween = daysbetween + 304;
        }否则,如果(个月2 == 12){
            daysbetween = daysbetween + 334;
        } 其他 { }

        //这个添加留在MONTH1天
        如果(months1!= 2){
            如果(months1&所述; 8){
                如果(months1%2​​!= 0){
                    daysbetween = daysbetween +(31  -  days1);
                }否则,如果(months1%2​​ == 0){
                    daysbetween = daysbetween +(30  -  days1);
                }
            }否则如果(months1→8){
                如果(months1%2​​!= 0){
                    daysbetween = daysbetween +(30  -  days1);
                }否则,如果(months1%2​​ == 0){
                    daysbetween = daysbetween +(31  -  days1);
                }
            }
        }

        //这个添加留在MONTH1如果二月的天
        如果((leapyear1 ==真)及及(months1 == 2)){
            daysbetween = daysbetween +(29  -  days1);
        } 其他 {
            daysbetween = daysbetween +(28  -  days1);
        }

        daysbetween = daysbetween + days2; //增加了留在MONTH2天
        daysbetween = daysbetween +((((year2-1) - (YEAR1 + 1))+ 1)* 365); //添加天的年总

        为(长I =(YEAR1 + 1); I<(year2-1);我++){//看到leapyears B /ñYEAR1与放大器的#; YEAR2
            如果((ⅰ%4 == 0)&安培;&安培;(ⅰ%100 = 0)||(ⅰ%400 == 0)!){
                leapyearcounter ++;
            }
        }

        daysbetween = daysbetween + leapyearcounter; //添加leapyear天

        如果((valid1 ==假)||(valid2 == FALSE)){
            的System.out.println(!对不起你给了我一个或多个无效的日期!);
        }否则如果(daysbetween == 1){
            的System.out.println(有+ daysbetween +这两个日期之间的天!);
        }否则如果(daysbetween!= 1){
            的System.out.println(有+ daysbetween +这两个日期之间的天!);
        }否则,如果(daysbetween == 0){
            的System.out.println(有这两个日期之间无天!);
        }
    }
}
 

解决方案

除非这个功课,或只是一些自我伤害的事情你都去,我可以推荐使用的乔达时库您的所有日期时间的计算:

时间使用乔达答案:〜22分

This is a couple days off when I run the program. Any advice on what I am doing wrong?

I know there is a simpler way to do it, but for this I'm trying to show all the actual steps in finding the days between. thanks!

public class DaysBetween {

    public static void main (String []args) {

        long months1 = Long.parseLong(args[0]);
        long days1 = Long.parseLong(args[1]);
        long year1 = Long.parseLong(args[2]);
        long months2 = Long.parseLong(args[3]);
        long days2 = Long.parseLong(args[4]);
        long year2 = Long.parseLong(args[5]);

        long daysbetween = 0; 
        long leapyearcounter = 0;
        boolean leapyear1 = false;
        boolean leapyear2 = false;    
        boolean valid1 = true;
        boolean valid2 = true;
        int earlier = 0;

        // this tests to see which date is earlier
        if (year1 == year2){ 
            if (months1 == months2) {
                if (days1 == days2) {
                    daysbetween = daysbetween;
                } else if (days1 < days2) {
                    earlier = 1;
                }
            } else if (months1 < months2) {
            earlier = 1;
            }
        } else if (year1 < year2 ) {
            earlier = 1;
        }

        // this switches the dates depending on which is earlier
        switch(earlier) { 
        case 1: months1 = Long.parseLong(args[0]);
            days1   = Long.parseLong(args[1]);
            year1   = Long.parseLong(args[2]);
            months2 = Long.parseLong(args[3]);
            days2   = Long.parseLong(args[4]);
            year2   = Long.parseLong(args[5]);
        break;  
        default: 
            months1 = Long.parseLong(args[3]);
            days1   = Long.parseLong(args[4]);
            year1   = Long.parseLong(args[5]);
            months2 = Long.parseLong(args[0]);
            days2   = Long.parseLong(args[1]);
            year2   = Long.parseLong(args[2]);
        break;
        }

        //this section tests if the earlier date is valid
        if((year1 % 4 == 0) && (year1 % 100 != 0) || (year1 % 400 == 0)) {
            leapyear1 = true;
        }

        if ((leapyear1 == true) && (months1 == 2)) {
            if (days1 <= 29 && days1 >=1){
                valid1 = true;
            }
        } else if ((leapyear1 == false) && (months1 == 2)){
            if (days1 <= 28 && days1 >= 1){
                valid1 = true;
            }
        }

        if (months1 != 2) {
            if (months1 < 8 ) {
                if (months1 %2 != 0) {
                    if (days1 <= 31 && days1 >=1){
                        valid1 = true;
                    } else {
                        valid1 = false;
                    }
                } else if (months1 %2 == 0)  {
                    if (days1 <= 30 && days1 >=1){
                        valid1 = true;
                    } else {
                        valid1 = false;
                    }
                }
            } else if (months1 > 8) {
                if (months1 %2 != 0) {
                    if (days1 <= 30 && days1 >=1){
                        valid1 = true;
                    } else {
                        valid1 = false;
                    }
                } else if (months1 %2 == 0)  {
                    if (days1 <= 31 && days1 >=1){
                        valid1 = true;
                    } else {
                        valid1 = false;
                    }
                }
            }
        }

        // this section tests if the later date is valid
        if((year2 % 4 == 0) && (year2 % 100 != 0) || (year2 % 400 == 0)) {
            leapyear2 = true;
        }

        if ((leapyear2 == true) && (months2 == 2)) {
            if (days2 <= 29 && days2 >=1){
                valid2 = true;
            }
        } else if ((leapyear2 == false) && (months2 == 2)){
            if (days2 <= 28 && days2 >= 1){
                valid2 = true;
            }
        }

        if (months2 != 2) {
            if (months2 < 8 ) {
                if (months2 %2 != 0) {
                    if (days2 <= 31 && days2 >=1){
                        valid2 = true;
                    } else {
                        valid2 = false;
                    }
                } else if (months2 %2 == 0)  {
                    if (days2 <= 30 && days2 >=1){
                        valid2 = true;
                    } else {
                        valid2 = false;
                    }
                }
            } else if (months2 > 8) {
                if (months2 %2 != 0) {
                    if (days2 <= 30 && days2 >=1){
                        valid2 = true;
                    } else {
                        valid2 = false;
                    }
                } else if (months2 %2 == 0)  {
                    if (days2 <= 31 && days2 >=1){
                        valid2 = true;
                    } else {
                        valid2 = false;
                    }
                }
            }
        }

        //this adds a day to the total if the earlier date is in january & its a leap year
        if ((months1 == 1) && (leapyear1 == true)) {
            daysbetween = daysbetween +1;
        }

        //this adds the months left in year1
        if (months1 == 1) { 
            daysbetween = daysbetween + 334;
        } else if (months1 == 2) {
            daysbetween = daysbetween + 306;
        } else if (months1 == 3) {
            daysbetween = daysbetween + 275;
        } else if (months1 == 4) {
            daysbetween = daysbetween + 245; 
        } else if (months1 == 5) {
            daysbetween = daysbetween + 214;
        } else if (months1 == 6) {
            daysbetween = daysbetween + 184;
        } else if (months1 == 7) {
            daysbetween = daysbetween + 153;
        } else if (months1 == 8) {
            daysbetween = daysbetween + 122;
        } else if (months1 == 9) {
            daysbetween = daysbetween + 92;
        } else if (months1 == 10) {
            daysbetween = daysbetween + 61;
        } else if (months1 == 11) {
            daysbetween = daysbetween + 31;
        } else { }

        // this adds the extra day if year2 is leap year and if the month is march or later
        if ((months2 >= 3) && (leapyear2 = true)) { 
            daysbetween = daysbetween + 1;
        }

        // this adds the months up to the month in year2
        if (months2 == 1) { 
            daysbetween = daysbetween;
        } else if (months2 == 2) {
            daysbetween = daysbetween + 31;
        } else if (months2 == 3) {
            daysbetween = daysbetween + 59;
        } else if (months2 == 4) {
            daysbetween = daysbetween + 90; 
        } else if (months2 == 5) {
            daysbetween = daysbetween + 120;
        } else if (months2 == 6) {
            daysbetween = daysbetween + 151;
        } else if (months2 == 7) {
            daysbetween = daysbetween + 181;
        } else if (months2 == 8) {
            daysbetween = daysbetween + 212;
        } else if (months2 == 9) {
            daysbetween = daysbetween + 243;
        } else if (months2 == 10) {
            daysbetween = daysbetween + 273;
        } else if (months2 == 11) {
            daysbetween = daysbetween + 304;
        } else  if (months2 == 12) {
            daysbetween = daysbetween + 334;
        } else { }

        //this add the days left in month1
        if (months1 != 2) { 
            if (months1 < 8 ) {
                if (months1 %2 != 0) {
                    daysbetween = daysbetween + (31 - days1);
                } else if (months1 %2 == 0) {
                    daysbetween = daysbetween + (30 - days1);
                }
            } else if (months1 > 8) {
                if (months1 %2 != 0) {
                    daysbetween = daysbetween + (30 - days1);
                } else if (months1 %2 == 0)  {
                    daysbetween = daysbetween + (31 - days1);
                }
            }
        }

        // this add the days left in month1 if its feb
        if ((leapyear1 == true) && (months1 == 2)) { 
            daysbetween = daysbetween + (29 - days1);
        } else {
            daysbetween = daysbetween + (28 - days1);
        }

        daysbetween = daysbetween + days2; // adds the days left in month2
        daysbetween = daysbetween + ((((year2-1)-(year1+1))+1)*365); // adds the days in the years to the total

        for (long i = (year1+1); i < (year2-1) ; i++) { // sees the # of leapyears b/n year1 & year2
            if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0)) {
                leapyearcounter++;
            }
        }

        daysbetween = daysbetween + leapyearcounter; // adds the leapyear days

        if ((valid1 == false) || (valid2 == false)) {
            System.out.println("Sorry! You gave me one or more invalid dates!");
        } else if (daysbetween == 1){
            System.out.println("There is " + daysbetween + " day between those two dates!");
        } else if (daysbetween != 1) {
            System.out.println("There are " + daysbetween + " days between those two dates!");
        } else if (daysbetween == 0) {
            System.out.println("There are no days between those two dates!");
        }
    }
}

解决方案

Unless this homework or just some self hurting thing you have going can I recommend using the joda time library for all your datetime calculations:

Time to use joda answer: ~22 minutes

这篇关于之间的日期的Java天的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆