- 相關(guān)推薦
C語(yǔ)言中時(shí)間的基本用法
C語(yǔ)言是用電比較廣泛的編程語(yǔ)言,但是對(duì)于C語(yǔ)言中時(shí)間的基本用法你了解清楚了嗎?下面小編給大家介紹C語(yǔ)言中時(shí)間的基本用法,歡迎閱讀!
time_t和struct tm
在C語(yǔ)言中用time_t類型表示一個(gè)時(shí)間,通常它是一個(gè)和long一樣長(zhǎng)的整數(shù),也就是說(shuō),在32位環(huán)境下,它是4字節(jié),在64位環(huán)境下,它是8字節(jié)。它保存的就是一個(gè)整數(shù)值,表示了從1970-01-01 08:00:00到其所表示時(shí)間的秒數(shù),它是一個(gè)非負(fù)整數(shù),所以,time_t無(wú)法表示早于1970-01-01 08:00:00的時(shí)間。
一個(gè)很常用的函數(shù)就是time_t time(time_t *_v) ,它的參數(shù)是一個(gè)time_t類型的指針,返回一個(gè)和傳入?yún)?shù)相等的time_t類型值。如果time()函數(shù)的參數(shù)是0,則返回當(dāng)前的時(shí)間。
現(xiàn)在我們已經(jīng)能用C語(yǔ)言表示一個(gè)時(shí)間了,但是這個(gè)時(shí)間只是從某個(gè)時(shí)間開始的秒數(shù),如何表示更詳細(xì)的時(shí)間細(xì)節(jié)呢?這就要用到struct tm類型了,它可以表示更具體的時(shí)間信息。
它一個(gè)結(jié)構(gòu)體,我們就先看一下它的成員信息,一個(gè)struct tm類型包括以下成員:
int tm_year表示時(shí)間的年份,它的值從1900年開始算起,也就是說(shuō)當(dāng)其值為1的時(shí)候,表示的是1901年。因?yàn)閠ime_t類型表示的時(shí)間范圍不早于1970年,所以這個(gè)值通常不小于70。
int tm_mon表示時(shí)間是幾月,它的值是0到11,0表示的是一月,而11表示的是12月。
int tm_mday表示時(shí)間是當(dāng)前月的幾號(hào),其值的范圍自然是根據(jù)月份不同也不相同。
int tm_wday表示時(shí)間是星期幾,它的值的范圍是0到6,0是星期天,1是星期一,6是星期六。
int tm_yday表示時(shí)間是當(dāng)前年的第幾天,要注意的是1月1號(hào)是第0天。
int tm_hour表示時(shí)間是幾時(shí)。
int tm_min表示時(shí)間是幾分。
int tm_sec表示時(shí)間是幾秒。
int tm_isdst表示是否是夏令時(shí)。
localtime()
如何把一個(gè)time_t類型構(gòu)造成struct tm類型呢?用struct tm *localtime(const time_t *_v)函數(shù)即可,注意參數(shù)和返回值都是指針類型。
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> #include <time.h> int main() {
time_t tt = time (0); //獲取當(dāng)前時(shí)間
struct tm *pst = localtime (&tt); //把time_t類型轉(zhuǎn)換為struct tm類型
printf ( "The year is %d.
" , pst->tm_year + 1900); //別忘了要加1900
return 0; } |
上述程序輸出:
1 | The year is 2016. |
mktime()
那么如何把struct tm類型轉(zhuǎn)換為time_t類型呢?就用time_t mktime(struct tm *_v)函數(shù),注意參數(shù)是指針類型。
那么如何輸出時(shí)間呢?可以簡(jiǎn)單的使用char *ctime(time_t *_v)函數(shù)和char *asctime(struct tm *_v)函數(shù),要注意的是返回的字符串結(jié)尾包含換行符 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> #include <time.h> int main() {
struct tm st;
st.tm_year = 2016 - 1900;
st.tm_mon = 8;
st.tm_mday = 13;
st.tm_hour = 16;
st.tm_min = 30;
st.tm_sec = 0;
st.tm_isdst = 0;
time_t tt = mktime (&st);
printf ( "%s" , asctime (&st));
printf ( "%s" , ctime (&tt));
return 0; } |
上述程序輸出:
1 2 | Tue Sep 13 16:30:00 2016 Tue Sep 13 16:30:00 2016 |
我們自己用struct tm構(gòu)造了一個(gè)時(shí)間,并且在執(zhí)行mktime()函數(shù)后,tm_wday屬性也會(huì)自動(dòng)計(jì)算出來(lái)。
clock()
在time.h中,還有一些其他很常用的函數(shù),比如clock_t clock()函數(shù),clock_t也是一個(gè)整數(shù),是typedef long clock_t;得來(lái)的。這個(gè)函數(shù)返回程序運(yùn)行到這條語(yǔ)句所消耗的時(shí)間。單位一般是毫秒,可以通過(guò)printf("%d ", CLOCKS_PER_SEC);這樣確定,若輸出1000,則證明是毫秒。
我們可以方便的用它來(lái)計(jì)算程序某一段語(yǔ)句所消耗的時(shí)間:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> #include <time.h> int main() {
int i = 0;
printf ( "CLOCKS_PER_SEC: %ld
" , CLOCKS_PER_SEC);
long c = clock ();
while (i < 1<<30) i++;
printf ( "The while loop cost %ld.
" , clock () - c);
c = clock ();
for (i = 0; i < 1<<30; i++);
printf ( "The for loop cost %ld.
" , clock () - c);
return 0; } |
上述程序輸出:
1 2 3 | CLOCKS_PER_SEC: 1000 The while loop cost 2234. The for loop cost 2206. |
【 C語(yǔ)言中時(shí)間的基本用法】相關(guān)文章:
c語(yǔ)言中map的基本用法10-28
在C語(yǔ)言中轉(zhuǎn)換時(shí)間的基本方法07-14
c語(yǔ)言中bit的用法11-01
C語(yǔ)言中assert用法09-22
C語(yǔ)言中的assert用法10-10
c語(yǔ)言中default的用法05-26
c語(yǔ)言中多個(gè)if的用法11-12
c語(yǔ)言中邏輯或的用法05-23