This is a couple of days off when I run the program. Any tips on what I'm doing wrong?
I know that there is an easier way to do this, but for this I am trying to show all the actual steps in finding the days between them.
Homework, so you cannot use date and time libraries.
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;
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;
}
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;
}
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;
}
}
}
}
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;
}
}
}
}
if ((months1 == 1) && (leapyear1 == true)) {
daysbetween = daysbetween +1;
}
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 { }
if ((months2 >= 3) && (leapyear2 = true)) {
daysbetween = daysbetween + 1;
}
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 { }
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);
}
}
}
if ((leapyear1 == true) && (months1 == 2)) {
daysbetween = daysbetween + (29 - days1);
} else {
daysbetween = daysbetween + (28 - days1);
}
daysbetween = daysbetween + days2;
daysbetween = daysbetween + ((((year2-1)-(year1+1))+1)*365);
for (long i = (year1+1); i < (year2-1) ; i++) {
if ((i % 4 == 0) && (i % 100 != 0) || (i % 400 == 0)) {
leapyearcounter++;
}
}
daysbetween = daysbetween + leapyearcounter;
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!");
}
}
}
source
share