當前位置:才華齋>計算機>C語言>

 C語言中時間的基本用法

C語言 閱讀(2.75W)

C語言中時間的基本用法

C語言是用電比較廣泛的程式語言,但是對於C語言中時間的基本用法你瞭解清楚了嗎?下面小編給大家介紹C語言中時間的基本用法,歡迎閱讀!

 C語言中時間的基本用法

  C語言中時間的基本用法

  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型別包括以下成員:

int tm_year表示時間的年份,它的值從1900年開始算起,也就是說當其值為1的時候,表示的是1901年。因為time_t型別表示的時間範圍不早於1970年,所以這個值通常不小於70。

int tm_mon表示時間是幾月,它的'值是0到11,0表示的是一月,而11表示的是12月。

int tm_mday表示時間是當前月的幾號,其值的範圍自然是根據月份不同也不相同。

int tm_wday表示時間是星期幾,它的值的範圍是0到6,0是星期天,1是星期一,6是星期六。

int tm_yday表示時間是當前年的第幾天,要注意的是1月1號是第0天。

int tm_hour表示時間是幾時。

int tm_min表示時間是幾分。

int tm_sec表示時間是幾秒。

int tm_isdst表示是否是夏令時。

localtime()

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

1234567891011#include <stdio.h>#include <time.h>intmain(){time_ttt =time(0);//獲取當前時間structtm*pst =localtime(&tt);//把time_t型別轉換為struct tm型別printf("The year is %d.", pst->tm_year + 1900);//別忘了要加1900return0;}

 上述程式輸出:

1The year is 2016.

mktime()

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

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

12345678910111213141516171819#include <stdio.h>#include <time.h>intmain(){structtmst;_year = 2016 - 1900;_mon = 8;_mday = 13;_hour = 16;_min = 30;_sec = 0;_isdst = 0;time_ttt =mktime(&st);printf("%s",asctime(&st));printf("%s",ctime(&tt));return0;}

上述程式輸出:

12Tue Sep 13 16:30:00 2016Tue 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", CLOCKS_PER_SEC);這樣確定,若輸出1000,則證明是毫秒。

我們可以方便的用它來計算程式某一段語句所消耗的時間:

12345678910111213141516171819#include <stdio.h>#include <time.h>intmain(){inti = 0;printf("CLOCKS_PER_SEC: %ld", CLOCKS_PER_SEC);longc =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);return0;}

  上述程式輸出:

123CLOCKS_PER_SEC: 1000The while loop cost 2234.The for loop cost 2206.