c語言中,如何比較兩個時間相差幾天

2022-02-17 06:04:30 字數 6585 閱讀 4650

1樓:旗五阿哥

計算兩個年月日之間的天數,思路是分別算出日期的總天數然後相減。

要考慮閏年的情況,判斷閏年的口訣:4年一閏,100年不閏,400年再閏。

((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)

網上找了一個(偷懶= =!),修改下如下:

#include

int sum(int y,int m,int d)unsigned char x[13]=;

int i,s=0;

for(i=1;iif(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;is+=x[i];//整月的天數s+=d;//日的天數

return s;//返回總天數,相對公元1年void main()

unsigned char y1,m1,d1,y2,m2,d2;

int s1,s2;

printf("輸入第一個年 月 日:");

printf("輸入第二個年 月 日:");

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編譯測試通過。

2樓:匿名使用者

datetime dt1 = convert.todatetime(d1);

datetime dt2 = convert.todatetime(d2);

timespan ts = dt1 - dt2;

int sub = ts.days; //sub就是兩天相差的天數

c語言如何計算兩個時間相差多少

3樓:

任意輸入兩個24小時制的時間,輸出兩個時間的時間差;

return 0;

//檢查時間的格式

int checktime(time time)

//    printf("小時格式錯誤:%d\n",(time.hours>=24||time.hours<0));

//    printf("分鐘格式錯誤:%d\n",(time.minutes>=60||time.minutes<0));

//    printf("秒格式錯誤  :%d\n",(time.seconds>=60||time.minutes<0));

return ((time.hours>24||time.hours<0)||(time.

minutes>=60||time.minutes<0)||(time.seconds>=60||time.

minutes<0));

//輸出按個數輸出時間

void printtime(time time)

printf("%d:%d:%d",time.hours,time.minutes,time.seconds);

//大的時間放到第一個變數,小的時間方法哦第二個變數

void swap(time *time1,time *time2)

//保證第一個時間永遠大於第二個時間

if(time2->hours>time1->hours)//如果有time

//交換兩個時間的小時

time2->hours^=time1->hours;

time1->hours^=time2->hours;

time2->hours^=time1->hours;

//交換兩個時間的分鐘:

time1->minutes^=time2->minutes;

time2->minutes^=time1->minutes;

time1->minutes^=time2->minutes;

//交換兩個時間的秒:

time1->seconds^=time2->seconds;

time2->seconds^=time1->seconds;

time1->seconds^=time2->seconds;

else if(time2->minutes>time1->minutes&&time1->hours==time2->hours)測試:

4樓:杜哥是個小天才

time.c

定義一個結構體實現兩個時間的加減

#include

#include

typedef struct

int seconds;

int minutes;

int hours;

}time;

int checktime(time time);

void printtime(time time);

void swap(time *time1,time *time2);//大的時間放在前面

time subtract1(time *first,time *second);

time subtract(time *first,time *second);//預設第一個時間比第二個大

int main()

time time1;

time time2;

time time3;

char againch[5]="y";

while(strcmp(againch,"y")==0||strcmp(againch,"y")==0)

int again=1;

while(again)

printf("輸入時間1:");

if(checktime(time1))

printf("-----輸入時間格式錯誤!請重新輸入\n");

again=1;

else

again=0;

again=1;

while(again)

printf("輸入時間2:");

if(checktime(time2))

printf("-----輸入時間格式錯誤!請重新輸入\n");

again=1;

else

again=0;

swap(&time1,&time2);

printf("           ");

printtime(time1);

printf(" - ");

printtime(time2);

printf(" = ");

printtime(time3);

printf("\n");

printf("繼續[y/n]?:");

scanf("%s",againch);

return 0;

//檢查時間的格式

int checktime(time time)

//    printf("小時格式錯誤:%d\n",(time.hours>=24||time.hours<0));

//    printf("分鐘格式錯誤:%d\n",(time.minutes>=60||time.minutes<0));

//    printf("秒格式錯誤  :%d\n",(time.seconds>=60||time.minutes<0));

return ((time.hours>24||time.hours<0)||(time.

minutes>=60||time.minutes<0)||(time.seconds>=60||time.

minutes<0));

//輸出按個數輸出時間

void printtime(time time)

printf("%d:%d:%d",time.hours,time.minutes,time.seconds);

//大的時間放到第一個變數,小的時間方法哦第二個變數

void swap(time *time1,time *time2)

//保證第一個時間永遠大於第二個時間

if(time2->hours>time1->hours)//如果有time

//交換兩個時間的小時

time2->hours^=time1->hours;

time1->hours^=time2->hours;

time2->hours^=time1->hours;

//交換兩個時間的分鐘:

time1->minutes^=time2->minutes;

time2->minutes^=time1->minutes;

time1->minutes^=time2->minutes;

//交換兩個時間的秒:

time1->seconds^=time2->seconds;

time2->seconds^=time1->seconds;

time1->seconds^=time2->seconds;

else if(time2->minutes>time1->minutes&&time1->hours==time2->hours)

//交換兩個時間的分鐘:

time1->minutes^=time2->minutes;

time2->minutes^=time1->minutes;

time1->minutes^=time2->minutes;

//交換兩個時間的秒:

time1->seconds^=time2->seconds;

time2->seconds^=time1->seconds;

time1->seconds^=time2->seconds;

else if(time2->seconds>time1->seconds&&time1->minutes==time2->minutes)

//交換兩個時間的秒:

time1->seconds^=time2->seconds;

time2->seconds^=time1->seconds;

time1->seconds^=time2->seconds;

//計算兩個時間的差

time subtract(time *first,time *second)//預設第一個時間比第二個大

time result;

//先對秒進行相減

if(first->seconds>=second->seconds)//如果第一個秒大於或者等於

result.seconds=first->seconds-second->seconds;

else//如果第一個的秒數小的話

first->minutes=first->minutes-1;//借位

first->seconds=first->seconds+60;

result.seconds=first->seconds-second->seconds;

//接著對分鐘相減

if(first->minutes>=second->minutes)//如果第一個秒大於或者等於

result.minutes=first->minutes-second->minutes;

else//如果第一個的秒數小的話

first->hours=first->hours-1;//借位

first->minutes=first->minutes+60;

result.minutes=first->minutes-second->minutes;

//交換後 預設第一個小時會大於第一個,沒有借位的情況,不用

result.hours=first->hours-second->hours;

return result;

拓展資料

c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

二十世紀八十年代,為了避免各開發廠商用的c語言語法產生差異,由美國國家標準局為c語言制定了一套完整的美國國家標準語法,稱為ansi c,作為c語言最初的標準。目前2023年12月8日,國際標準化組織(iso)和國際電工委員會(iec)釋出的c11標準是c語言的第三個官方標準,也是c語言的最新標準,該標準更好的支援了漢字函式名和漢字識別符號,一定程度上實現了漢字程式設計。

c語言中printf直接列印兩個函式介面的返回值問題

輸出應該是sunday monday 第一行 是定義一個靜態的指標字串!第3行是定義一個靜態函式 strcpy buf,msg index 函式的意思吧msg index 複製到buf字串裡,然後現在計入main函式,輸出 計入函式get day傳入引數0進入函式就是msg指標陣列msg第一個引數是...

c語言中如P如果出現這Pij兩個是什麼意思啊,求解啊

p為指向3個元素的一維陣列的指標 p i表示第i個包含3個元素的一維陣列的首地址 p i 對p i解引用,得到p i的內容,為一維陣列p i的首元素的首地址 p i j,一維陣列p i的第j個元素的地址 p i j 一維陣列p i的第j個元素的內容如果p指向一個二維陣列a i j 那麼 p i j ...

C語言中讓兩個正的int型變數相加的程式為什麼執行結果會出現負數

因為int是有最大限制的,當相加的結果超出這個限制之後,就是所謂的溢位 最高位可能會變為1,也就是表示負數,所以結果為負數 一般定義的int型變數都是指有符號型的,數值範圍是 2 15 2 15 1 儲存的時候是以二進位制版數儲存,佔權兩個位元組,一共是有16位,最高位為符號位,符號位為0,即為正數...