#include?stdio.h
成都創(chuàng)新互聯(lián)公司是一家以網(wǎng)絡(luò)技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護、網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站備案、服務(wù)器租用、申請域名、軟件開發(fā)、重慶小程序開發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運營推廣經(jīng)驗的科技公司,有著多年的網(wǎng)站建站經(jīng)驗,致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個面向全國乃至全球的業(yè)務(wù)窗口:建站聯(lián)系熱線:028-86922220
#include?stdlib.h
#include?string.h
#include?math.h
#include?time.h
int??get_days(const?char*?from,?const?char*?to);
time_t?convert(int?year,int?month,int?day);
int?main()
{
const?char*?from="2013-3-15";
const?char*?to="2015-8-14";
int?days=get_days(from,to);
printf("From:%s\nTo:%s\n",from,to);
printf("%d\n",days);
return?0;
}
time_t?convert(int?year,int?month,int?day)
{
struct?tm?info={0};
info.tm_year=year-1900;
info.tm_mon=month-1;
info.tm_mday=day;
return?mktime(info);
}
int??get_days(const?char*?from,?const?char*?to)
{
int?year,month,day,fromSecond,toSecond;
sscanf(from,"%d-%d-%d",year,month,day);
fromSecond=(int)convert(year,month,day);
sscanf(to,"%d-%d-%d",year,month,day);
toSecond=(int)convert(year,month,day);
return?(toSecond-fromSecond)/24/3600;
}
From:2013-3-15
To:2015-8-14
882
Press?any?key?to?continue
這才算是用了庫函數(shù)了···
計算兩個年月日之間的天數(shù),思路是分別算出日期的總天數(shù)然后相減。
要考慮閏年的情況,判斷閏年的口訣:4年一閏,100年不閏,400年再閏。
((year % 4 == 0 year % 100 != 0) || year % 400 == 0)
網(wǎng)上找了一個(偷懶= =!),修改下如下:
#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;iy;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;im;i++)
s+=x[i];//整月的天數(shù)
s+=d;//日的天數(shù)
return s;//返回總天數(shù),相對公元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("相差天數(shù):%ld\n",s1-s2);
else
printf("相差天數(shù):%ld\n",s2-s1);
}
以上代碼VC6編譯測試通過。
雖然這個思路顯得有些笨,但是其它算法,代碼太長太復(fù)雜,要考慮多種情況,不如直接算兩個日期距離公元元年1月1日的天數(shù),然后相減
#include stdio.h
#include stdlib.h
#include time.h
void main()
{
unsigned char time1[] = {?10, 8, 31, 9, 26 };
unsigned char time2[] = { 10, 8, 31, 9, 50 };
struct tm t1 = {0};
struct tm t2 = {0};
time_t _t1;
time_t _t2;
double diff;
t1.tm_year = time1[0] + 100;
t1.tm_mon = time1[1];
t1.tm_mday = time1[2];
t1.tm_hour = time1[3];
t1.tm_min = time1[4];
t2.tm_year = time2[0] + 100;
t2.tm_mon = time2[1];
t2.tm_mday = time2[2];
t2.tm_hour = time2[3];
t2.tm_min = time2[4];
_t1 = _mkgmtime( t1 );
_t2 = _mkgmtime( t2 );
diff = difftime(_t2, _t1 );
printf( "相差 %.0f 分鐘\n", diff / 60 );
}
擴展資料:
C語言中有兩個相關(guān)的函數(shù)用來計算時間差,分別是:
time_t time( time_t *t)? ?與 clock_t clock(void)
頭文件: time.h
計算的時間單位分別為: s? ?, ms
time_t 和 clock_t 是函數(shù)庫time.h 中定義的用來保存時間的數(shù)據(jù)結(jié)構(gòu)
返回值:
1、time? : 返回從公元1970年1月1號的UTC時間從0時0分0秒算起到現(xiàn)在所經(jīng)過的秒數(shù)。如果參數(shù) t 非空指針的話,返回的時間會保存在 t 所指向的內(nèi)存。
2、clock:返回從“開啟這個程序進程”到“程序中調(diào)用clock()函數(shù)”時之間的CPU時鐘計時單元(clock tick)數(shù)。? ? ?1單元 = 1 ms。
所以我們可以根據(jù)具體情況需求,判斷采用哪一個函數(shù)。
具體用法如下例子:
#include time.h
#include stdio.h
#include stdlib.h
int main()
{
time_t c_start, t_start, c_end, t_end;
c_start = clock();? ? //! 單位為ms
t_start = time(NULL);? //! 單位為s
system("pause");
c_end? ?= clock();
t_end = time(NULL);
//!difftime(time_t, time_t)返回兩個time_t變量間的時間間隔,即時間差
printf("The pause used %f ms by clock()\n",difftime(c_end,c_start));
printf("The pause used %f s by time()\n",difftime(t_end,t_start));
system("pause");
return 0;
}
因此,要計算某一函數(shù)塊的占用時間時,只需要在執(zhí)行該函數(shù)塊之前和執(zhí)行完該函數(shù)塊之后調(diào)用同一個時間計算函數(shù)。再調(diào)用函數(shù)difftime()計算兩者的差,即可得到耗費時間。