【发布时间】:2015-02-14 11:21:23
【问题描述】:
这是程序:
class DateDiff {
int month[];//stores the number of days in all the months
int d,y,m,n;
DateDiff(int d,int m,int y) {
month=new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
this.d=d;
this.m=m;
this.y=y;
if(isLeap(y))
month[1]=29;//if year is leap, February has 29 days
else
month[1]=28;
n=0;
}
//function for checking for Leap Year
boolean isLeap(int y3) {
if((y3%400==0) || ((y3%100!=0)&&(y3%4==0)))
return true;
else
return false;
}
//function for finding the number of days that have passed from start of the year
int getDayNum(int d1,int m1,int y1) {
int i=0;
if(isLeap(y1))//February leap year correction
month[1]=29;
else
month[1]=28;
for(;i<m1;i++)
if(d<=month[i]&&i==m1-1) {
n+=d1;//add days when month hasn't completed
break;
}
else
n+=month[i]; //add the normal number of days in the month
return n;
}
//finding difference between the dates
int diff(int d2,int m2,int y2) {
int daysLeft=getDayNum(d,m,y);//store the number of days passed since start of the year y
if(isLeap(y))
daysLeft=366-daysLeft;//subtracting gives the number of days left in year y
else
daysLeft=365-daysLeft;
for(int x=y+1;x<y2;x++)//for subsequent years add 366 or 365 days as required
if(isLeap(x))
daysLeft+=366;
else
daysLeft+=365;
daysLeft+=getDayNum(d2,m2,y2);//add the number of days that have passed since start of year y2
return daysLeft;}}
public class DateDifference{
public static int main(int d1,int m1,int y1,int d2,int m2,int y2) {
DateDiff obj=new DateDiff(d1,m1,y1);
return obj.diff(d2,m2,y2);
}
}
我没有通过这个程序得到正确的输出。通过d1=20,m2=3,y1=1997 和d2=14,m2=2,y2=2015(日期分别为 1997 年 3 月 20 日和 2015 年 2 月 14 日)。
正确的差异是 6540 天。我的程序给了 6619 天。有人可以指出错误吗?
【问题讨论】:
-
看起来您是在做某种学习练习,但以防万一您不知道,Java 拥有自己的 Date API,可以开箱即用地执行此操作。最好使用语言提供的工具。 docs.oracle.com/javase/7/docs/api/java/util/Date.html
-
OP 也可能对使用 joda-time 库或 Java 8 提供的更新的 java.time API 感兴趣:stackoverflow.com/questions/12032051/…
-
@Alex T. 是的,这是一个学习练习。我确实知道 Java 有内部 API 可以为我做到这一点,但我不会按照老师的指示使用它。我必须从基础开始。
-
使用 java 8 中的 LocalDate 和 Period 类。在下面查看我的答案