您的位置:首页 > 其它

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

2014-06-04 17:52 375 查看
  闰年:年份是整百数时,必须是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) ;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: