黑马程序员技术交流社区
标题:
有谁知道下面这个题目怎么做?
[打印本页]
作者:
孤影卓尔
时间:
2014-2-24 19:31
标题:
有谁知道下面这个题目怎么做?
从键盘输入一个日期,格式为yyyy-M-d
要求计算该日期与1949年10月1日距离多少天
例如:
用户输入了:1949-10-2
程序输出:1
用户输入了:1949-11-1
程序输出:31
作者:
丶小天
时间:
2014-2-24 19:37
这么做:
public static int getDays(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2.after(g1)) {
gc2 = (GregorianCalendar) g2.clone();
gc1 = (GregorianCalendar) g1.clone();
} else {
gc2 = (GregorianCalendar) g1.clone();
gc1 = (GregorianCalendar) g2.clone();
}
gc1.clear(Calendar.MILLISECOND);
gc1.clear(Calendar.SECOND);
gc1.clear(Calendar.MINUTE);
gc1.clear(Calendar.HOUR_OF_DAY);
gc2.clear(Calendar.MILLISECOND);
gc2.clear(Calendar.SECOND);
gc2.clear(Calendar.MINUTE);
gc2.clear(Calendar.HOUR_OF_DAY);
while (gc1.before(gc2)) {
gc1.add(Calendar.DATE, 1);
elapsed++;
}
return elapsed;
}
public void main(String[] args) {
Calendar cal = Calendar.getInstance();
GregorianCalendar gc1 = new GregorianCalendar(2009, Calendar.JANUARY, 1);
GregorianCalendar gc2 = new GregorianCalendar(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH), cal.get(Calendar.DATE));
int days= getDays(gc1, gc2);
System.out.println(days);
}
复制代码
作者:
syw02014
时间:
2014-2-24 20:07
本帖最后由 syw02014 于 2014-2-24 20:09 编辑
这是一道 蓝桥杯题目,之前赛前联系时练过,直接给你代码(核心部分用函数写你):
public static int countDays(int year, int month, int day)
{
int[][] days={{31,28,31,30,31,30,31,31,30,31,30,31}, //闰年、平年每月的天数
{31,29,31,30,31,30,31,31,30,31,30,31}};
int index=year%4==0&&year%100!=0||year%400==0?1:0;//用index标识是什么年0:平,1:闰年
if(year<1949||month<1||month>12||day<1||day>days[index][month-1])//判断输入日期是否正确
return -1;
int[] years ={365, 366};
int otherDays=92; //1949-10-1到1950-1-1剩余的天数
int count=0; //用于统计日期离1949-10-1有多少天
if(1949==year) //如果输入year为1949
{
if(10<month)
return -1;
if(10==month)
count=day--;
else if(11==month)
count=days[0][9]+day - 1;
else if(12==month)
count=days[0][9]+days[0][10]+day-1;
}
else //如果输入year大于1949
{
if(year-1949==1) //如果输入year等于1950
{
for(int i=0;i<month--;i++)
count+=days[index][i];
count+=otherDays+day-1;
}
else //如果输入year大于1950
{
for(inti=1950;i<year;i++)
{
int index2=i%4==0&&i%100!=0||i%400==0?1:0;
count+=years[index2];
}
for(int i=0;i<month-1;i++)
count+=days[index][i];
count+=otherDays+day-1;
}
}
return count;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2