計算兩個日期之間的天數c語言
㈠ 用c語言編寫計算兩個日期之間的天數
#include <time.h>
#include <stdio.h>
void main()
{
	tm t1={0},t2={0};
	t1.tm_year = 1999-1900;
	t1.tm_mon = 2-1;
	t1.tm_mday = 3;
	t2.tm_year = 2015-1900;
	t2.tm_mon = 5-1;
	t2.tm_mday = 4;
	time_t a1 = mktime(&t1);
	time_t a2 = mktime(&t2);
	printf("相差%d天", (a2-a1)/86400);
}
ps:看不懂了再追問
㈡ C語言中 求兩個日期間的天數
以前做的C語言實習作業......
要把年、月、日分開來求...
#include <stdio.h>
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};                  /*儲存12個月的天數*/
void main()
{
 int spec_year(int);
 void scan(int *year,int *month,int *day);
 long com_year(int y1,int y2);
 int com_month(int y1,int m1,int y2,int m2);
 int com_day(int y1,int m1,int d1,int y2,int m2,int d2);
 int year1,month1,day1;
 int year2,month2,day2;
 long sum=0;
 int k=0;
 /*輸入兩個日期,做合法性檢查*/ 
 printf("Enter the first date,like 1988 11 30:");
 scan(&year1,&month1,&day1);
 printf("Enter the second date,like 1988 11 30:");
 scan(&year2,&month2,&day2);
 /*當輸入的第一個日期比第二個日期大時,將二者對換*/ 
 if((year1>year2)||((year1==year2)&&(month1>month2))||((year1==year2)&&(month1==month2)&&(day1>day2)))
 {
  int temp;
  temp=year1;year1=year2;year2=temp;
  temp=month1;month1=month2;month2=temp;
  temp=day1;day1=day2;day2=temp;
 }
 /*計算兩個日期之間的天數*/
 sum+=com_year(year1,year2);                                /*計算兩個年份之間的天數*/
 sum+=com_month(year1,month1,year2,month2);                 /*計算兩個月份之間的天數*/
 sum+=com_day(year1,month1,day1,year2,month2,day2);         /*計算兩天之間的天數*/
 /*輸出*/
 printf("There are %ld days between them.\n",sum);
}
void scan(int *year,int *month,int *day)                          /*輸入日期函數,合法性判斷*/
{
 int k=0;
 do
 {
  if(k!=0)
   printf("\nWrong date!\n");
  k++;
  /*printf("Please write down the day,like 1988 11 30:");*/
  scanf("%d%d%d",year,month,day);
  if(spec_year(*year))
   mon[1]=29;
 }while(*day>mon[*month-1]||*month>13||*year<1900||*year>3000);
 mon[1]=28;
}
long com_year(int y1,int y2)                                      /*計算兩個年份之間的天數*/
{
 int i;
 long sum=0; 
 for(i=y1+1;i<y2;i++)
 {
  if(spec_year(i))
   sum+=366;
  else
   sum+=365;   
 }
 return sum; 
}
int com_month(int y1,int m1,int y2,int m2)                       /*計算兩個月份之間的天數*/
{
 int i;
 int sum=0;
 if(y1!=y2)
 {
  if(spec_year(y1))
  {
   mon[1]=29;
  }
  if(m1!=m2)
  {
   for(i=m1;i<12;i++)
  {
   sum+=mon[i];    
  }
  mon[1]=28;
  if(spec_year(y2))
  {
   mon[1]=29;
  }
  for(i=0;i<m2-1;i++)
  {
   sum+=mon[i];   
  }
  mon[1]=28;
  }
  else
  {
  for(i=m1-1;i<12;i++)
  {
   sum+=mon[i];    
  }
  mon[1]=28;
  if(spec_year(y2))
  {
   mon[1]=29;
  }
  for(i=0;i<m2-1;i++)
  {
   sum+=mon[i];   
  }
  mon[1]=28;
  }
 }
 else
 { 
  if(spec_year(y1))
  {
   mon[1]=29;  
  }
  for(i=m1;i<m2-1;i++)
  {
   sum+=mon[i];
  }  
  mon[1]=28;
 } 
 return sum; 
}
int com_day(int y1,int m1,int d1,int y2,int m2,int d2)             /*計算兩天之間的天數*/
{
 int i;
 int sum=0;
 
 if(m1!=m2)
 {
  if(spec_year(y1))
  {
   mon[1]=29;  
  } 
  
  sum+=(mon[m1-1]-d1); 
  
  sum+=d2;
  
  mon[1]=28; 
 }
 else
 {
  sum+=d2-d1;
  
 }
 
 return sum;
}
int spec_year(int year)                                           /*判斷是否為閏年*/
{
 if((year%400==0)||((year%4==0)&&(year%100!=0)))
  return 1;
 else
  return 0;
}
㈢ 給定年月日 怎樣用C語言編程計算2個日期之間的時間天數
問題不難。
思路如下:
1. 要判斷時間的合法性(如果不想判斷也可以)
參考資料:(使用的是C++,修改之後TC下也可運行,主要是看思路)
http://hi..com/ctralt/blog/item/ee937c167e87db4b21a4e96b.html
2. 判斷兩個日期之間的天數
判斷輸入的年份是不是閏年;年份是否相同;月份是否相同;日是否相同?
同年同月最好計算,日數相減就出來了;同年不同月也好計算,計算中間相隔幾個月,轉換成天數,小的日期距月底有多少天,大的日期距月初多少天,三個數相加;關鍵是不同年的日期計算:先計算中間相隔幾年,這幾年的天數就出來了,再計算小的日期到年底有多少天,其次計算大的日期距年初有多少天,三個數相加就可以了。
參考資料:(也是用C++編寫的,你可以把類修改為結構體,一樣可以使用)
http://..com/question/55367386 
以下為計算兩個日期之間天數的代碼:
/* 返回絕對值 */
int abs(int a,int b)
{
 if(a>=b)
  return (a-b);
 else
  return (b-a);
}
/* 判斷是否為閏年:是,返回 1 ; 不是, 返回 0 . */
int IsLeap(int year)
{
 if(((year%4==0)&&(year%100!=0))||year%400==0)
  return 1;
 else
  return 0;
}
/* 判斷某個日期從年初(y年1月1日)到該天(y年m月d日)的天數 */
int Days(int y,int m,int d)
{
 int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 int i;
 int sum = 0 ;  /* 計算天數 */
 if(IsLeap(y)) /* 如果為閏年,2月有 29 天 */
  days[2] = 29 ;
 for(i=0;i<m;i++)
  sum = sum +days[i] ;
 sum = sum + d - 1 ;
  return sum;
}
/*
 判斷兩個日期之間的天數.
 日期一:年 y1,月 m1,日 d1;
 日期一:年 y2,月 m2,日 d2;
*/
int DiffDays(int y1,int m1,int d1,int y2,int m2,int d2)
{
 int s1,s2; /* 計算兩個日期從年初到該日期的天數 */
 int count; /* 計算兩個年份之間的差值 */
 int sum=0; /*                        */
 int t,t1,t2;
 if(y1==y2)
 {
  s1 = Days(y1,m1,d1);
  s2 = Days(y2,m2,d2);
  return abs(s1,s2);  
 }
 else if(y1>y2)
 {
  count = y1 - y2 ;
  if(count == 1)
  {
   t1 = Days(y1,m1,d1);
   t2 = Days(y2,12,31) - Days(y2,m2,d2);
   return (t1+t2+count);
  }
  else
  {   
   for(t = y2+1;t<y1;t++)
    sum = sum + Days(t,12,31);
   cout<<sum<<endl;
   t2 = Days(y2,12,31) - Days(y2,m2,d2);
   t1 = Days(y1,m1,d1);
   return (sum+t1+t2+count);
  }
 }
 else
 {
  count = y2 - y1 ;
  if(count == 1)
  {
   t2 = Days(y2,m2,d2);
   t1 = Days(y1,12,31) - Days(y1,m1,d1);
   return (t1+t2+count);
  }
  else
  {   
   for(t = y1+1;t<y2;t++)
    sum = sum + Days(t,12,31);
   t2 = Days(y2,m2,d2);
   t1 = Days(y1,12,31) - Days(y1,m1,d1);
   return (sum+t1+t2+count);
  }
 }
  
} 
/*
以上代碼在Viusal C++ 6.0 編譯下通過,TC下也可以通過。
使用DiffDays(int,int,int,int,int,int)這個函數就可計算出兩個日期之間的天數.
至於日期的合法性,沒有進行判斷;也就是說,你如果輸入一個不合法的日期,計算出來的結果是不正確的;如果是合法日期,那就沒問題。
*/
㈣ 用C語言求兩個日期之間的天數,急!!
太多地方有問題了 按你的寫法給你改了一下 自己比對一下
#include "stdio.h"
#include "conio.h"
void main()
{
 int i,y,m1,m2,d1,d2;
 int d=0;
 scanf("%d,%d,%d,%d,%d",&y,&m1,&d1,&m2,&d2);
 y=(y%4==0&&y%100!=0||y%400==0)?1:0;
 for(i=m1;i<m2;i++)
  switch(i)
  {
   case 1:
   case 3:
   case 5:
   case 7:
   case 8:
   case 10:
   case 12:
    d+=31;
    break;
   case 4:
   case 6:
   case 9:
   case 11:
    d+=30;
    break;
   case 2:
    d=d+28+y;
    break;
  }
 printf("%d",d+d2-d1);
 getch();
}
㈤ C語言求兩個日期相差的天數
計算兩個年月日之間的天數,思路是分別算出日期的總天數然後相減。
要考慮閏年的情況,判斷閏年的口訣:4年一閏,100年不閏,400年再閏。
((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
網上找了一個(偷懶= =!),修改下如下:
#include <stdio.h>
int sum(int y,int m,int d)
{
unsigned char x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,s=0;
for(i=1;i<y;i++)
if(i%4==0 && i%100!=0 || i%400==0)
s+=366;//閏年
else
s+=365;//平年
if(y%4==0 && y%100!=0 || y%400==0)
x[2]=29;
for(i=1;i<m;i++)
s+=x[i];//整月的天數
s+=d;//日的天數
return s;//返回總天數,相對公元1年
}
void main()
{
unsigned char y1,m1,d1,y2,m2,d2;
int s1,s2;
printf("輸入第一個年 月 日:");
scanf("%d %d %d",&y1,&m1,&d1);
printf("輸入第二個年 月 日:");
scanf("%d %d %d",&y2,&m2,&d2);
s1=sum(y1,m1,d1);
s2=sum(y2,m2,d2);
if (s1 > s2)
printf("相差天數:%ld\n",s1-s2);
else
printf("相差天數:%ld\n",s2-s1);
}
以上代碼VC6編譯測試通過。
雖然這個思路顯得有些笨,但是其它演算法,代碼太長太復雜,要考慮多種情況,不如直接算兩個日期距離公元元年1月1日的天數,然後相減
㈥ 用c語言編程計算兩個日期之間的天數
直接算兩個日期距離公元元年1月1日的天數:
若干個完整的年,若干個完整的月,若干天,加起來之後兩個天數相減就行了.
日期的合法性,閏年之類的就不羅嗦了.
㈦ 如何用c語言來計算日期間隔天數
樓上的說的太麻煩了(真是傻瓜做法)//定義兩個時間DateTime time1=Convert.ToDateTime("2006-05-23");DateTime time2=Convert.ToDateTime("2045-12-15");//計算間隔天數(精確到毫秒格式為「2222.22.22.2222」)TimeSpan span = (TimeSpan)(time2-time1);int result = Convert.ToInt32(Convert.ToString(span).SubString(0,Convert.ToString(span).IndexOf(".")));//result就是你要的天數
㈧ C語言求任意兩個日期間的天數,有代碼但報錯
//代碼錯誤是:printf寫成了pritnf
//代碼考慮的不周全,如果輸入的是同一年,那代碼怎麼計算,還有不同年計算也有大問題
//你的代碼思路看的我頭大,乾脆沒看,在你的代碼基礎上直接給改了,供參考
//這個代碼中注釋的應該很清楚,有疑問可以追問
#include<stdio.h>
intleap(intyear)
{
if(year%4==0||year%400==0&&year%100!=0)
return1;
else
return0;
}
inta[12]={31,29,31,30,31,30,31,31,30,31,30,31};/*閏年月份天數*/
intb[12]={31,28,31,30,31,30,31,31,30,31,30,31};
voidmain()
{
intt,s,i,t1=0,n=0,n2=365,n1=366;/*s為總天數,n為年中間天數*/
inty1,m1,d1;
inty2,m2,d2;
printf("請輸入第一個年月日: ");
scanf("%d%d%d",&y1,&m1,&d1);
printf("請輸入第二個年月日: ");
scanf("%d%d%d",&y2,&m2,&d2);
if(m1>12||d1>31||m2>12||d2>31)
{
printf("輸入有誤,請重輸!");
return;//加個錯誤退出
}
//先輸入的是較後的年月日,就交換過來
if(y1*10000+m1*100+d1>y2*10000+m2*100+d2)
{
t=y1;y1=y2;y2=t;
t=m1;m1=m2;m2=t;
t=d1;d1=d2;d2=t;
}
//這里計算中間年份的天數,比如2000.2.2-2003.2.3,這里計算2001和2002的天數,後面再計算2000.2.2到2001.1.1的天數和2003.1.1到2003.2.3的天數
for(i=y1+1;i<y2;i++)
{
if(leap(i)==1)
n=n+n1;
else
n=n+n2;
}
if(y1<y2)//如果不同年
{
//計算y1年m1月之後月份的天數,比如2000.2.2,就計算2000年3月到12月的天數
for(i=m1+1;i<=12;i++)
{
if(leap(y1)==1)
t1=t1+a[i-1];
else
t1=t1+b[i-1];
}
//計算y1年m1月d1日當月剩餘的天數
if(leap(y1)==1)
t1=t1+a[m1-1]-d1;
else
t1=t1+b[m1-1]-d1;
//計算y2年1月1日到y2年m2月d2日的天數
for(i=1;i<m2;i++)
{
if(leap(y2)==1)
t1=t1+a[i-1];
else
t1=t1+b[i-1];
}
t1=t1+d2;
}
else//同一年
{
if(m1==m2)//同一年又同一月
{
t1=d2-d1;
}
else
{
//同一年不同月,先計算中間月份的天數
for(i=m1+1;i<m2;i++)
{
if(leap(y1)==1)
t1=t1+a[i-1];
else
t1=t1+b[i-1];
}
//計算m1月d1日當月剩餘天數加上m2月d2日的天數
if(leap(y1)==1)
t1=t1+a[m1-1]-d1+d2;
else
t1=t1+b[m1-1]-d1+d2;
}
}
s=n+t1;
printf("%d年%d月%d日與%d年%d月%d日共有%d天 ",y1,m1,d1,y2,m2,d2,s);
}
㈨ c語言 用庫函數計算兩日期相差的天數
#include <stdio.h>  
struct date  
{  
    int year;  
    int month;  
    int day;  
};  
int main(void)  
{     
    int isPrime(int year);  
    int dateDiff(struct date mindate,struct date maxdate);  
    struct date mindate,maxdate;  
    int days;  
  
    printf("please input the one date:");  
    scanf("%i-%i-%i",&mindate.year,&mindate.month,&mindate.day);  
    printf("please input other day:");  
    scanf("%i-%i-%i",&maxdate.year,&maxdate.month,&maxdate.day);  
  
    days=dateDiff(mindate,maxdate);   
    printf("the day is:%d\n",days);  
    return 0;  
}  
  
/************************************************************************/  
/*    判斷閏年函數(4年一潤,100年不潤,400年再潤)                         */  
/************************************************************************/  
int isPrime(int year)  
{  
    if ((year%4==0&&year%100!=0)||(year%400==0))  
    {  
        return 1;  
    }   
    else  
    {  
        return 0;  
    }  
  
}  
  
int dateDiff(struct date mindate,struct date maxdate)  
{  
    int days=0, flag=1;  
    const int primeMonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};  
    const int notPrimeMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};  
      
    /************************************************************************/  
    /*        交換兩個日期函數,將小的日期給mindate,將大的日期給maxdate     */  
    /************************************************************************/  
    struct date tmp;  
    if ((mindate.year>maxdate.year)|| (mindate.year==maxdate.year&&mindate.month>maxdate.month)||(mindate.year==maxdate.year&&mindate.month==maxdate.month&&mindate.day>maxdate.day))  
    {  
        tmp=mindate;  
        mindate=maxdate;  
        maxdate=tmp;  
    }   
      
    int maxmonth,minmonth;  
    /************************************************************************/  
    /* 主要思路:拿2002-8-8   2005-2-22來說                                  */                                           
    /*   將2004-8-8---2005-2-22----2005-7-8                                 */  
    /*一前一後剛好N年,算出2005-2-22到2005-7-8的天數,然後用總年*36(5|6)減掉) */  
    /*          2002-9-8      2005-11-22                                    */  
    /*          2002-9-8-----2005-9-8-----2005-11-22(這次是加上後面天數)    */  
    /*如何判斷是加還是減呢?年大而月小的,則是減,程序中用flag標示             */  
    /************************************************************************/  
    if (maxdate.month<mindate.month)  
    {  
        maxmonth=mindate.month;  
        minmonth=maxdate.month;  
        flag=-1;  
    }  
    else  
    {  
        maxmonth=maxdate.month;  
        minmonth=mindate.month;  
        flag=1;  
    }  
      
    /************************************************************************/  
    /*  從mindate.year開始累加到maxdate.year                                */  
    /************************************************************************/  
    for(int j=mindate.year;j<maxdate.year;++j)  
    {  
        if (isPrime(j)==1)  
        {  
            days+=366;  
        }  
        else  
            days+=365;  
    }  
      
    /************************************************************************/  
    /* 從minmonth累加到maxmonth,分閏年和平年                                */  
    /************************************************************************/  
    int day;  
    if(isPrime(maxdate.year)==1)  
    {  
          
        for(int i=minmonth;i<maxmonth;i++)  
        {  
            day=primeMonth[i-1]*flag;  
            days=days+day;  
        }  
        days=days+maxdate.day-mindate.day;  
    }  
    else  
    {  
        for (int i=minmonth;i<maxmonth;i++)  
        {  
            day=notPrimeMonth[i-1]*flag;  
            days=days+day;  
        }  
        days=days+maxdate.day-mindate.day;  
    }  
    return days;  
}
㈩ c語言兩日期相差天數
#include <stdio.h>
#include<math.h>
int main()
{
    int s=0,m1,d1,y1,y2,m2,d2,i,a[12]={31,28,31,30,31,30,31,31,30,31,30,31},b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    scanf("%d %d %d",&y1,&m1,&d1);
	scanf("%d %d %d",&y2,&m2,&d2);
   if(y1==y2)
   {
	 if((y1%100!=0&&y1%4==0)||y1%400==0)
	 {
		 while(m1<m2)
		 {s=b[m1-1]+s;
	     m1=m1+1;
		 }
	 }
	 else
	 {
		 while(m1<m2)
		 {s=a[m1-1]+s;
	       m1=m1+1;
		 }
	 }
     	printf("%d days\n",s+d2-d1);
   }
   else
   {
	     while(y1<y2)
		 {
			 if(m1<=2)
			 {
				 if((y1%100!=0&&y1%4==0)||y1%400==0)
				 {s=366+s;}
			     else
				 {s=365+s;}
				 y1=y1+1;
			 }
			 else
			 {
				 y1=y1+1;
				 if((y1%100!=0&&y1%4==0)||y1%400==0)
				 {s=366+s;}
		         else
				 {s=365+s;}
			 }
		 }
		 if(m1<=m2)
		 {
			 if((y2%100!=0&&y2%4==0)||y2%400==0)
			 {for(i=0;m1<m2;i++)
			 {s=b[m1-1]+s;
	          m1=m1+1;
			 }
			 }
	         else
			 {for(i=0;m1<m2;i++)
			 {s=a[m1-1]+s;
	          m1=m1+1;
			 }
			 }
			 printf("%d days\n",s+d2-d1);
		 }
		 else
		 {
			 if((y2%100!=0&&y2%4==0)||y2%400==0)
			 {
				 while(m1>m2)
				 {s=b[m1-1]+s;
	              m1=m1-1;
				 }
			 }
	         else
			 {
				 while(m1>m2)
				 {s=a[m1-1]+s;
	              m1=m1-1;
				 }
			 }
			 printf("%d days\n",s+d2-d1);
		 }
   }
   return 0;
}
你試試看!
