闰年:年份是整百数时,必须是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) ; } }