C語(yǔ)言中時(shí)間的基本用法小結(jié)
前言
在我學(xué)的這些編程語(yǔ)言中,總是記不住它們的時(shí)間處理方式,每次用到時(shí)都要重新看,所以想著在這里記錄下來,也方便用到時(shí)查找,也方便有需要的朋友們參考。
time_t和struct tm
在C語(yǔ)言中用time_t
類型表示一個(gè)時(shí)間,通常它是一個(gè)和long
一樣長(zhǎng)的整數(shù),也就是說,在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無法表示早于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年開始算起,也就是說當(dāng)其值為1的時(shí)候,表示的是1901年。因?yàn)?code>time_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ù)和返回值都是指針類型。
#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.\n", pst->tm_year + 1900); //別忘了要加1900 return 0; }
上述程序輸出:
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é)尾包含換行符\n。
#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; }
上述程序輸出:
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ì)算出來。
clock()
在time.h中,還有一些其他很常用的函數(shù),比如clock_t clock()
函數(shù),clock_t
也是一個(gè)整數(shù),是typedef long clock_t;
得來的。這個(gè)函數(shù)返回程序運(yùn)行到這條語(yǔ)句所消耗的時(shí)間。單位一般是毫秒,可以通過printf("%d\n", CLOCKS_PER_SEC);
這樣確定,若輸出1000,則證明是毫秒。
我們可以方便的用它來計(jì)算程序某一段語(yǔ)句所消耗的時(shí)間:
#include <stdio.h> #include <time.h> int main() { int i = 0; printf("CLOCKS_PER_SEC: %ld\n", CLOCKS_PER_SEC); long c = clock(); while(i < 1<<30) i++; printf("The while loop cost %ld.\n", clock() - c); c = clock(); for(i = 0; i < 1<<30; i++); printf("The for loop cost %ld.\n", clock() - c); return 0; }
上述程序輸出:
CLOCKS_PER_SEC: 1000 The while loop cost 2234. The for loop cost 2206.
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用C語(yǔ)言能帶來一定的幫助,如果有疑問大家可以留言交流。
上一篇:C語(yǔ)言基礎(chǔ) 原碼、反碼、補(bǔ)碼和移碼詳解
欄 目:C語(yǔ)言
下一篇:C語(yǔ)言數(shù)據(jù)結(jié)構(gòu) 鏈表與歸并排序?qū)嵗斀?/a>
本文標(biāo)題:C語(yǔ)言中時(shí)間的基本用法小結(jié)
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1798.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段函數(shù)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排序法函數(shù)
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段函數(shù)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法