我这也有一道提,不知怎么写。
求两个日期之间的天数。输入的都是字符串形式,例如2004/03/21,2006/03/21。求两个之间的天数。最好把c和java的两种都写出来。
第一中方法可以系统函数。
第二种方法不能用系统函数。
int days(string date1,string date2)
我也知道写一点,就是可能写的不完整。这程序很长,面试的时候写这样的程序很费时间的呀,而且也没什么地方可以写的下,所以我看到这样的题目很烦,一般都不愿写。
求两个日期之间的天数。输入的都是字符串形式,例如2004/03/21,2006/03/21。求两个之间的天数。最好把c和java的两种都写出来。
第一中方法可以系统函数。
第二种方法不能用系统函数。
int days(string date1,string date2)
我也知道写一点,就是可能写的不完整。这程序很长,面试的时候写这样的程序很费时间的呀,而且也没什么地方可以写的下,所以我看到这样的题目很烦,一般都不愿写。
欢迎有更好的答案/* ==================计算某年某一天到该年年初的天数=================== */int days_of_year(int year,int mon,int day)
{
int days_of_mon[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int i, days; if (leap(year)==1) /* 如果是闰年,则这年的2月有29天 */
days_of_mon[1]=29;
else
days_of_mon[1]=28; days = 0; for ( i = 0; i < mon - 1; i++ )
days += days_of_mon[i];
days += day;
return days;
}
/*============================================================================*//*====================判断是否闰年.是返回true==========================*/
leap(int year)
{
if (( (year%4==0) && (year%100!=0) ) || (year%400==0) )
return 1;
}
/*============================================================================*/main()
{ int i,days=0,day1=0,day2=0;
int StartYear,StartMon,StartDay;
int EndYear,EndMon,EndDay; printf("Please input StartYear and EndYear!\n");
printf("StartYear:");
scanf("%d,%d,%d",&StartYear,&StartMon,&StartDay);
printf("EndYear:");
scanf("%d,%d,%d",&EndYear,&EndMon,&EndDay);
if(StartYear == EndYear) /* 同一年,先分别计算起始年和末年离该年最后一天的天数day1和day2,最后二者之差即得结果*/
{
if( leap(StartYear)==1 )
{
day1 =366-days_of_year(StartYear,StartMon,StartDay);
day2 =366-days_of_year(EndYear,EndMon,EndDay);
days =(day1-day2);
}
else
{
day1 =365-days_of_year(StartYear,StartMon,StartDay);
day2 =365-days_of_year(EndYear,EndMon,EndDay);
days +=(day1-day2);
}
printf("Result:%d",days);
getch();
return;
} else /*不是同一年,则先计算起始年和末年的天数day1和day2,再算中间相隔整年的天数,最后二者相加即得结果*/
{
if ( leap(StartYear)==1 ) day1 += 366-days_of_year(StartYear,StartMon,StartDay); else day1 += 365-days_of_year(StartYear,StartMon,StartDay); day2 += days_of_year(EndYear,EndMon,EndDay); days +=(day1+day2);
} for(i=(StartYear+1);i<EndYear;i++) /* 计算相隔整年的天数*/
{
if ( leap(i)==1 )
days += 366;
else
days += 365;
} printf("Result:%d",days);
getch();}
Date d1 = df.parse("2004/03/21");
Date d2 = df.parse("....");int days = (d2.getTime()-d1.getTime())/(3600*1000*24);
import java.text.SimpleDateFormat;
import java.util.Date;
public class CalDays {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date d1 = sdf.parse("2004/03/21");
Date d2 = sdf.parse("2006/03/21");
long days = (d2.getTime() - d1.getTime())/ (1000 * 60 * 60 * 24);
System.out.println(days);
}
}
Calendar calendar=Calendar.getInstance();
String start="2004/03/21",end="2006/03/21";
calendar.setTime(getDateTime(start));
long s=calendar.getTimeInMillis();
calendar.setTime(getDateTime(end));
System.out.print("now data:"+(calendar.getTimeInMillis()-s)/(24*60*60*1000));
}
/**
* 得到时间
* @return
* @throws Exception
*/
public static java.util.Date getDateTime(String date) throws Exception {
SimpleDateFormat format=new SimpleDateFormat("yyyy/MM/dd");
try {
return format.parse(date);
} catch (ParseException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
throw new Exception("不是一个有效的时间格式");
}
}
像这种情况,如果我去面试不就翘了?求楼下指点..
: )