程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 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)函數即可,留意參數和前往值都是指針類型。

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

clock()

在time.h中,還有一些其他很常用的函數,比方clock_t clock()函數,clock_t也是一個整數,是typedef long clock_t;得來的。這個函數前往順序運轉到這條語句所耗費的時間。單位普通是毫秒,可以經過printf("%d\n", CLOCKS_PER_SEC);這樣確定,若輸入1000,則證明是毫秒。

我們可以方便的用它來計算順序某一段語句所耗費的時間:

#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.

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家學習或許運用C言語能帶來一定的協助,假如有疑問大家可以留言交流。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved