C語言中時間的基本用法小結

2021-09-23 20:29:29 字數 2366 閱讀 6969

在我學的這些程式語言中,總是記不住它們的時間處理方式,每次用到時都要重新看,所以想著在這裡記錄下來,也方便用到時查詢,也方便有需要的朋友們參考。

time_t和struct tm

在c語言中用time_t型別表示乙個時間,通常它是乙個和long一樣長的整數,也就是說,在32位環境下,它是4位元組,在64位環境下,它是8位元組。它儲存的就是乙個整數值,表示了從1970-01-01 08:00:00到其所表示時間的秒數,它是乙個非負整數,所以,time_t無法表示早於1970-01-01 08:00:00的時間。

乙個很常用的函式就是time_t time(time_t *_v) ,它的引數是乙個time_t型別的指標,返回乙個和傳入引數相等的time_t型別值。如果time()函式的引數是0,則返回當前的時間。

現在我們已經能用c語言表示乙個時間了,但是這個時間只是從某個時間開始的秒數,如何表示更詳細的時間細節呢?這就要用到struct tm型別了,它可以表示更具體的時間資訊。

它乙個結構體,我們就先看一下它的成員資訊,乙個struct tm型別包括以下成員:

localtime()

如何把乙個time_t型別構造成struct tm型別呢?用struct tm *localtime(const time_t *_v)函式即可,注意引數和返回值都是指標型別。?

#include

#include

int main()

time_t tt = time(0); //獲取當前時間

struct tm *pst = localtime(&tt); //把time_t型別轉換為struct tm型別

printf("the year is %d.\n", pst->tm_year + 1900); //別忘了要加1900

return 0;

上述程式輸出:

the year is 2016.

mktime()

那麼如何把struct tm型別轉換為time_t型別呢?就用time_t mktime(struct tm *_v)函式,注意引數是指標型別。

那麼如何輸出時間呢?可以簡單的使用char *ctime(time_t *_v)函式和char *asctime(struct tm *_v)函式,要注意的是返回的字串結尾包含換行符\n。

#include

#include

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構造了乙個時間,並且在執行mktime()函式後,tm_wday屬性也會自動計算出來。

clock()

在time.h中,還有一些其他很常用的函式,比如clock_t clock()函式,clock_t也是乙個整數,是typedef long clock_t;得來的。這個函式返回程式執行到這條語句所消耗的時間。單位一般是毫秒,可以通過printf("%d\n", clocks_per_sec);這樣確定,若輸出1000,則證明是毫秒。

#include

#include

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.總結

C語言中static關鍵字用法小結

c語言中定義的static關鍵字主要有兩個作用。c 對它進行了擴充套件,有三個作用。第乙個作用是修飾變數,又可分為修飾全域性變數和修飾區域性變數兩種情況。1.修飾全域性變數 全域性變數的值存放在棧上,其儲存型別為靜態儲存型別,不管有沒有在其前加static關鍵字,因此,全域性變數的作用域為從定義全域...

c語言中指標的基本用法分析

1 指標指向變數 下面有這樣乙個 塊 int main void test int x,int y 最後輸出的結果還是a 10,b 15。因為在函式呼叫時,實參和形參之間只是值傳遞。但我們使用指標結果就不一樣了,如 int main void test int x,int y 輸出結果a 15,b ...

C語言中extern的用法

在c語言中,修飾符extern用在變數或者函式的宣告前,用來說明 此變數 函式是在別處定義的,要在此處引用 1.extern修飾變數的宣告。舉例來說,如果檔案a.c需要引用b.c中變數int v,就可以在a.c中宣告extern int v,然後就可以引用變數v。這裡需要注意的是,被引用的變數v的鏈...