关于“日期”的考法(闰年、两个日期间隔多少天)(金山笔试)

  闰年:年份是整百数时,必须是400的倍数才是闰年;不是400的倍数的年份,即使是4的倍数也是平年。即四年一闰,百年不闰,四百年再闰。 例如,2000年是闰年,1900年则是平年。(摘自“百度百科”)

题目1: 计算两个日期之间所间隔天数(转自:http://blog.csdn.net/vonger/article/details/5917764

以公元1年1月1日为起始日期,计算任意一个日期到它的日数是容易计算的,这样,我只要需要计算出两个需要计算的日期到公元1的所差天数就可以了。

Java语言:
//两个日期间的天数,测试通过。BY myself
public class DaysBetween{
    public static void main(String args[]){
        System.out.println(daysBetween(2000,2,10,2012,2,10));
    }
    public static int daysBetween(int y1,int m1,int d1,int y2,int m2,int d2){
        int days1=daysFromBeginning(y1,m1,d1);
        int days2=daysFromBeginning(y2,m2,d2);
        if(y1>y2){
            return days1-days2;
        }else if(y1<y2){
            return days2-days1;
        }else if(m1>m2){
            return days1-days2;
        }else if(m1<m2){
            return days2-days1;
        }else if(d1>d2){
            return days1-days2;
        }else if(d1<d2){
            return days2-days1;
        }else{
            return 0;
        }
    }

    public static int daysFromBeginning(int y, int m, int d){//以1年1月1日为Beginning
        int daysEachMonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
        int daysMonth[]=new int[13];
        daysMonth[0]=0;
        for(int i=1; i<13; i++){
            daysMonth[i]=daysMonth[i-1]+daysEachMonth[i];
        }
        int days_temp = (y-1)*365;
        int days_leap = (y-1)/400+((y-1)/4-(y-1)/100);
        int days_thisYear= daysMonth[m-1]+d+(isLeapYear(y)&&m>2?1:0);
        return days_temp+days_leap+days_thisYear;
    }

    public static boolean isLeapYear(int year){
        return  year%400==0||(year%4==0&&year%100!=0) ;
    }

}

    
原文地址:https://www.cnblogs.com/seven7seven/p/3672875.html