當前位置:首頁 » 編程語言 » 計算日期之間天數c語言

計算日期之間天數c語言

發布時間: 2022-08-08 06:40:02

① 計算兩日期之間天數的c語言程序

#include <stdio.h>
#include <time.h>
#include <memory.h>

int main(void)
{
time_t t1;
time_t t2;

struct tm OldTime;
struct tm NewTime;

memset(&OldTime,0x0,sizeof(tm));
OldTime.tm_year = 110;// 2010 年表示為 2010 - 1900 = 110
OldTime.tm_mon = 12;
OldTime.tm_mday = 6;

memset(&NewTime,0x0,sizeof(tm));
NewTime.tm_year = 111;// 2011 年表示為 2011 - 1900 = 111
NewTime.tm_mon = 12;
NewTime.tm_mday = 6;

t1 = mktime(&NewTime); //2011-12-6
t2 = mktime(&OldTime); //2010-12-6

printf("%d",(t1-t2)/(24*3600));

return 0;
}

② 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語言 用庫函數計算兩日期相差的天數

#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語言求兩個日期相差的天數

計算兩個年月日之間的天數,思路是分別算出日期的總天數然後相減。
要考慮閏年的情況,判斷閏年的口訣: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語言計算日期間離天數

#include <stdio.h>

int main(void)
{
int y1, m1, d1;
int y2, m2, d2;
int i, sum = 0;
int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30 ,31, 30 ,31};

/*input two dates*/
scanf("%d%d%d", &y1, &m1, &d1);
scanf("%d%d%d", &y2, &m2, &d2);

/*sum up the year between y1 and y2*/
for (i = y1 + 1; i < y2; ++i)
if (i % 400 == 0 || i % 100 != 0 && i % 4 == 0) sum += 366;
else sum += 365;

/*sum up the remaining days in y1*/
for (i = m1; i < 12; ++i)
sum += month[i];
sum += month[m1 - 1] - d1;
if (m1 <= 2 && (y1 % 400 == 0 || y1 % 100 != 0 && y1 % 4 == 0)) ++sum;

/*sum up the past days in y2*/
for (i = 0; i < m2; ++i)
sum += month[i];
sum += d2;
if (m2 > 2 && (y1 % 400 == 0 || y1 % 100 != 0 && y1 % 4 == 0)) ++sum;

printf("The total days is %d\n", sum);
return 0;
}

⑥ 如何用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語言編程計算兩個日期之間的天數

直接算兩個日期距離公元元年1月1日的天數:

若干個完整的年,若干個完整的月,若干天,加起來之後兩個天數相減就行了.

日期的合法性,閏年之類的就不羅嗦了.

⑧ 用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語言計算兩日期間的天數

//用 <time.h> 中的 time_t 和 struct tm 結構體, difftime() 函數

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

time_t maketime_t(char* date1)
{
struct tm tm0;
char str0[4];

//date1
memset( &tm0, 0, sizeof(tm0));

memset( str0, 0, 4);
strncpy(str0, date1, 4);
tm0.tm_year = atoi(str0) - 1900; //1900

memset( str0, 0, 4);
strncpy(str0, &date1[4], 2);
tm0.tm_mon = atoi(str0) - 1; //0-11

memset( str0, 0, 4);
strncpy(str0, &date1[6], 2);
tm0.tm_mday = atoi(str0); //1-31

return mktime(&tm0);
}

int day_of_day( char *date1, char *date2)
{
struct tm tm0;
char str0[4];
double diff_seconds;

time_t time_t1, time_t2;

time_t1 = maketime_t(date1);
time_t2 = maketime_t(date2);

diff_seconds = difftime(time_t1, time_t2);

return diff_seconds>0?(diff_seconds/3600/24):((-1)*diff_seconds/3600/24);
}

int main()
{
int diff_days;
diff_days = day_of_day("20121214", "20121211");
printf("diff_days=%d\n", diff_days);
return 0;
}

⑩ 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 ",s1-s2);

else

printf("相差天數:%ld ",s2-s1);

}

熱點內容
河北編程培訓 發布:2025-01-22 08:01:42 瀏覽:591
a星演算法視頻 發布:2025-01-22 07:55:01 瀏覽:878
快手安卓怎麼直播 發布:2025-01-22 07:54:58 瀏覽:937
買伺服器搭建vpn 發布:2025-01-22 07:53:21 瀏覽:808
路由器忘記密碼如何解 發布:2025-01-22 07:38:47 瀏覽:154
5分鍾視頻編譯 發布:2025-01-22 07:36:33 瀏覽:772
asp執行存儲過程 發布:2025-01-22 07:35:55 瀏覽:127
鎮政府搭建伺服器 發布:2025-01-22 07:32:13 瀏覽:1001
安卓系統可以查去過哪裡嗎 發布:2025-01-22 07:25:05 瀏覽:28
三星手機怎麼設置熱點密碼 發布:2025-01-22 07:20:11 瀏覽:39