#include?stdio.h
專注于為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站設(shè)計服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)遂寧免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
#include?time.h?
int?main()
{?
time_t?rawtime;?
struct?tm?*?timeinfo;?
time?(?rawtime?);?
timeinfo?=?localtime?(?rawtime?);?
printf?(?"The?current?date/time?is:?%s",?asctime?(timeinfo)?);?
return?0;
}
說明:
time_t // 時間類型(time.h 定義)?
struct tm { // 時間結(jié)構(gòu),time.h 定義如下:?
int tm_sec;?
int tm_min;?
int tm_hour;?
int tm_mday;?
int tm_mon;?
int tm_year;?
int tm_wday;?
int tm_yday;?
int tm_isdst;?
}?
time ( rawtime ); // 獲取時間,以秒計,從1970年1月一日起算,存于rawtime?
localtime ( rawtime ); //轉(zhuǎn)為當(dāng)?shù)貢r間,tm 時間結(jié)構(gòu)?
asctime() // 轉(zhuǎn)為標(biāo)準(zhǔn)ASCII時間格式:?
//就是直接打印tm,tm_year 從1900年計算,所以要加1900,月tm_mon,從0計算,所以要加1
/**
time.c
定義一個結(jié)構(gòu)體實(shí)現(xiàn)兩個時間的加減
*/
#includestdio.h
#includestring.h
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);//默認(rèn)第一個時間比第二個大
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:");
scanf("%d:%d:%d",time1.hours,time1.minutes,time1.seconds);
if(checkTime(time1))
{
printf("-----輸入時間格式錯誤!請重新輸入\n");
again=1;
}
else
again=0;
}
again=1;
while(again)
{
printf("輸入時間2:");
scanf("%d:%d:%d",time2.hours,time2.minutes,time2.seconds);
if(checkTime(time2))
{
printf("-----輸入時間格式錯誤!請重新輸入\n");
again=1;
}
else
again=0;
}
swap(time1,time2);
printf("? ? ? ? ? ?");
printTime(time1);
printf(" - ");
printTime(time2);
time3=subtract(time1,time2);
printf(" = ");
printTime(time3);
printf("\n");
printf("繼續(xù)[y/n]?:");
scanf("%s",againch);
}
return 0;
}
//檢查時間的格式
int checkTime(Time time)
{
//? ? printf("小時格式錯誤:%d\n",(time.hours=24||time.hours0));
//? ? printf("分鐘格式錯誤:%d\n",(time.minutes=60||time.minutes0));
//? ? printf("秒格式錯誤? :%d\n",(time.seconds=60||time.minutes0));
return ((time.hours24||time.hours0)||(time.minutes=60||time.minutes0)||(time.seconds=60||time.minutes0));
}
//輸出按個數(shù)輸出時間
void printTime(Time time)
{
printf("%d:%d:%d",time.hours,time.minutes,time.seconds);
}
//大的時間放到第一個變量,小的時間方法哦第二個變量
void swap(Time *time1,Time *time2)
{
//保證第一個時間永遠(yuǎn)大于第二個時間
if(time2-hourstime1-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-minutestime1-minutestime1-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-secondstime1-secondstime1-minutes==time2-minutes)
{
//交換兩個時間的秒:
time1-seconds^=time2-seconds;
time2-seconds^=time1-seconds;
time1-seconds^=time2-seconds;
}
}
//計算兩個時間的差
Time subtract(Time *first,Time *second)//默認(rèn)第一個時間比第二個大
{
Time result;
//先對秒進(jìn)行相減
if(first-seconds=second-seconds)//如果第一個秒大于或者等于
{
result.seconds=first-seconds-second-seconds;
}
else//如果第一個的秒數(shù)小的話
{
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//如果第一個的秒數(shù)小的話
{
first-hours=first-hours-1;//借位
first-minutes=first-minutes+60;
result.minutes=first-minutes-second-minutes;
}
//交換后 默認(rèn)第一個小時會大于第一個,沒有借位的情況,不用
result.hours=first-hours-second-hours;
return result;
拓展資料
C語言是一門通用計算機(jī)編程語言,應(yīng)用廣泛。C語言的設(shè)計目標(biāo)是提供一種能以簡易的方式編譯、處理低級存儲器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平臺的特性,以一個標(biāo)準(zhǔn)規(guī)格寫出的C語言程序可在許多電腦平臺上進(jìn)行編譯,甚至包含一些嵌入式處理器(單片機(jī)或稱MCU)以及超級電腦等作業(yè)平臺。
二十世紀(jì)八十年代,為了避免各開發(fā)廠商用的C語言語法產(chǎn)生差異,由美國國家標(biāo)準(zhǔn)局為C語言制定了一套完整的美國國家標(biāo)準(zhǔn)語法,稱為ANSI C,作為C語言最初的標(biāo)準(zhǔn)。目前2011年12月8日,國際標(biāo)準(zhǔn)化組織(ISO)和國際電工委員會(IEC)發(fā)布的C11標(biāo)準(zhǔn)是C語言的第三個官方標(biāo)準(zhǔn),也是C語言的最新標(biāo)準(zhǔn),該標(biāo)準(zhǔn)更好的支持了漢字函數(shù)名和漢字標(biāo)識符,一定程度上實(shí)現(xiàn)了漢字編程。
在VC中我是這樣弄的:
SYSTEMTIME time;
::GetSystemTime(time);\\取當(dāng)前時間,time為一個臨時的變量
CTime now=time;\\將當(dāng)前時間存到CTime變量中
\\輸入要進(jìn)行對比的時間存入time中,比如下面(對比時間是2006年8月20日):
time.wYear=2006;
time.wMonth=8;
time.wDay=20;
CTime cmptime=time;\\將要對比的時間放到另一個CTime變量中
CTimeSpan overtime=now-cmptime;\\比較時,兩時間直接作差,保存在CTimeSpan變量中,這個值有正負(fù),overtime雖然是CTimeSpan類型的,但是用法和CTime一樣
int overdays=overtime.GetDays();\\取天數(shù)差距,本例中就為9(今天是8月29日),如果剛才now-cmptime換成cmptime-now,現(xiàn)在的值就是-9
int overdays=overtime.GetMonths();同上,取月差距,其他方法一樣,年,分,秒都能比較
自己回去試一試吧,應(yīng)該有滿意的效果!
我也是琢磨了很長時間才弄出來,個人覺得算是比較方便的方法了,正如你所說,時間的計算比較復(fù)雜,容易出錯,不如讓提供好的MFC類對時間進(jìn)行處理,省去不必要的麻煩!