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> int main() {
time_t tt = time (0); //獲取當前時間
struct tm *pst = localtime (&tt); //把time_t類型轉換為struct tm類型
printf ( "The year is %d." , pst->tm_year + 1900); //別忘了要加1900
return 0; } |
上述程序輸出:
1 | 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)函數,要注意的是返回的字符串結尾包含換行符。
12345678910111213141516171819 | #include <stdio.h> #include <time.h> int main() {
struct tm st;
_year = 2016 - 1900;
_mon = 8;
_mday = 13;
_hour = 16;
_min = 30;
_sec = 0;
_isdst = 0;
time_t tt = mktime (&st);
printf ( "%s" , asctime (&st));
printf ( "%s" , ctime (&tt));
return 0; } |
上述程序輸出:
12 | 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", CLOCKS_PER_SEC);這樣確定,若輸出1000,則證明是毫秒。
我們可以方便的用它來計算程序某一段語句所消耗的時間:
12345678910111213141516171819 | #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; } |
上述程序輸出:
123 | CLOCKS_PER_SEC: 1000 The while loop cost 2234. The for loop cost 2206. |
-
C語言中遞歸函數的教學方法
導語:函數遞歸基於分治法思想,將複雜的大規模問題轉化為小規模問題進行求解,在算法設計中具有重要的理論意義和實用價值,是C語言教學的難點。下面就由小編為大家介紹一下C語言中遞歸函數的教學方法,歡迎大家閲讀!1.引言C語言是一種語法簡潔緊湊、運算符豐富、可移植...
-
win8系統安裝c語言方法
在win8/win8.1中C語言VC無法運行,那麼win8系統安裝c語言方法又變成了什麼呢?而現在的'計算機都是預裝win8/8.1系統,對於比較原始的TurboC是無法運行的,現在應屆畢業生小編向大家告訴大家win8系統運行TurboC軟件的方法。win8系統安裝c語言方法:win8系統運行TurboC...
-
C語言新人常見問題與錯誤
不知不覺,學習C語言也快一年了。雖然有C語言課,但是老師完全讓我們自己看書,在自學的過程中,和周圍同學交流中,以及後來在CSDN,BCCN,百度知道看帖回帖中,也看到許多C語言新人常遇到的問題與常犯的錯誤。不妨看看吧。以下僅供參考!對於完整的修正後的程序都在code::block...
-
C語言插入排序算法及實例代碼
插入排序是排序算法的一種,下面小編為大家整理了C語言插入排序算法及實例代碼,希望能幫到大家!這裏以從小到大排序為例進行講解。基本思想及舉例説明插入排序的基本思想是,將元素逐個添加到已經排序好的數組中去,同時要求,插入的元素必須在正確的位置,這樣原來排序好...