class FunDemo6
{
public static void main(String[] args)
{
//測試函數getDays
//System.out.println(getDays(1992,4,20));
System.out.println(subDays(1999,1,5,2001,3,10));
}
//判斷是否爲閏年
public static boolean isLeap (int y)
{
if(y%4==0&&y%100!=0||y%400==0)
return true;
else
return false;
}
//獲取這一年已經過了多少天
public static int getDays(int y,int m,int d)
{
int sum=0;
switch(m-1){
case 11:sum=sum+30;
case 10:sum=sum+31;
case 9:sum=sum+30;
case 8:sum=sum+31;
case 7:sum=sum+31;
case 6:sum=sum+30;
case 5:sum=sum+31;
case 4:sum=sum+30;
case 3:sum=sum+31;
case 2:if(isLeap(y))//一個函數調用了另外一個函數
sum+=29;//函數不能嵌套聲明
else
sum+=28;
case 1:sum=sum+31;
}
return sum+d;
}
//寫一個函數,計算這個日期在這一年中還剩多少天
public static int otherDays(int y,int m,int d)
{
if(isLeap(y))
return 366-getDays(y,m,d);
else//可以省略
return 365-getDays(y,m,d);
}
//直接寫一個函數,計算兩個日期之間相隔的天數
public static int subDays(int y1,int m1,int d1,int y2,int m2,int d2)
{
if(y1==y2)
{
int days1=getDays(y1,m1,d1)-getDays(y2,m2,d2);
return abs(days1);
}
else if(y1<y2)
{
//小的年份剩下的+大的年已經過的+中間年
int sum1=otherDays(y1,m1,d1);
int sum2=getDays(y2,m2,d2);
int sum3=0;
for(int i=y1+1;i<y2;i++)
{
if(isLeap(i))
sum3+=366;
else
sum3+=365;
}
return sum1+sum2+sum3;
}
else//y2>y1時
{
int sum1=otherDays(y1,m1,d1);
int sum2=getDays(y2,m2,d2);
int sum3=0;
for(int i=y2+1;i<y1;i++)
{
if(isLeap(i))
sum3+=366;
else
sum+=365;
}
return sum1+sum2+sum3;
}
}
public static int abs(int n){
return n>=0?n:-n;
}
}