1. 程式人生 > >Linux下time函式

Linux下time函式

Linux下time函式都在time.h標頭檔案中。
1、標頭檔案

和時間有關的標頭檔案有以下幾個:


time.h
sys/time.h
sys/times.h
sys/timeb.h
sys/timex.h
time.h是C標準庫的標頭檔案,其餘sys開頭的都是Linux系統自己的標頭檔案。

/usr/include/time.h定義了常用的time函式。

到/usr/include/sys目錄下檢視這幾個檔案:

sys/time.h定義了timezone結構體和Linux系統的時間函式。

sys/times.h定義了程序使用CPU時間的結構體tms。

sys/timeb.h定義了ftime函式的返回值的結構體timeb。

sys/timex.h定義了關於時鐘調整演算法的結構體timex。

2、常用函式和結構體

time函式原型(time.h中):


time_t time(time_t *calptr);
引數:

time_t型別變數的指標。

返回值:

time_t型別相當於一個long,time用於取Epoch記年以來到現在經過的秒數(系統當前時間),Epoch記年從1970年1月1日開始。把取到的時間存在指標指向的變數中。

localtime函式原型(time.h中):


struct tm *localtime(const time_t *calptr);
引數:

time_t型別變數的指標。

返回值:

指向tm結構體的指標型別。

作用是將time_t的值轉換為tm結構體。然後可以列印輸出。

tm結構體(time.h中):

/* Used by other time functions.  */
struct tm
{
  int tm_sec;            /* Seconds.    [0-60] (1 leap second) */
  int tm_min;            /* Minutes.    [0-59] */
  int tm_hour;            /* Hours.    [0-23] */
  int tm_mday;            /* Day.        [1-31] */
  int tm_mon;            /* Month.    [0-11] */
  int tm_year;            /* Year    - 1900.  */
  int tm_wday;            /* Day of week.    [0-6] */
  int tm_yday;            /* Days in year.[0-365]    */
  int tm_isdst;            /* DST.        [-1/0/1]*/

#ifdef    __USE_BSD
  long int tm_gmtoff;        /* Seconds east of UTC.  */
  __const char *tm_zone;    /* Timezone abbreviation.  */
#else
  long int __tm_gmtoff;        /* Seconds east of UTC.  */
  __const char *__tm_zone;    /* Timezone abbreviation.  */
#endif
};
ftime函式原型(timeb.h):


int ftime(struct timeb *tp);
引數:

指向timeb結構體變數的指標。

返回值:

將當前系統時間存入timeb結構體中,包括了秒和毫秒。作用就是能獲取當前時間精確到毫秒。

timeb結構體(sys/timeb.h):

/* Structure returned by the `ftime' function.  */
struct timeb
  {
    time_t time;        /* Seconds since epoch, as from `time'.  */
    unsigned short int millitm;    /* Additional milliseconds.  */
    short int timezone;        /* Minutes west of GMT.  */
    short int dstflag;        /* Nonzero if Daylight Savings Time used.  */
  };
times函式原型:


clock_t times(struct tms *buf);
引數:

指向tms結構體變數的指標。

返回值:

clock_t等同於long型別。用於獲得程序執行時的CPU時間。

tms結構體(sys/times.h中):

/* Structure describing CPU time used by a process and its children.  */
struct tms
  {
    clock_t tms_utime;        /* User CPU time.  */
    clock_t tms_stime;        /* System CPU time.  */

    clock_t tms_cutime;        /* User CPU time of dead children.  */
    clock_t tms_cstime;        /* System CPU time of dead children.  */
  };
#include 
#include 
#include 
#include 
#include 
#include 

int main(void)
{
  int i = 0;
  int sum = 0;
  long tck = 0;
  long lBeginTime = 0;
  long lEndTime = 0;
  
  time_t curr;
  struct tm * tTM;
  struct tms tTMS;
  struct timeb tTimeB;
  
  tzset();
  
  //time函式獲得秒數
  time(&curr);
  printf("current time is %ld seconds\n", curr);
  
  //localtime函式轉換time_t
  tTM = localtime(&curr);
  printf("%4d-%02d-%02d %02d:%02d:%02d\n", tTM->tm_year + 1900, tTM->tm_mon + 1, tTM->tm_mday, 
  tTM->tm_hour, tTM->tm_min, tTM->tm_sec);
  
  //ftime函式獲得時間包括毫秒
  ftime(&tTimeB);
  tTM = localtime(&tTimeB.time);
  printf("%4d-%02d-%02d %02d:%02d:%02d :%3d\n", tTM->tm_year + 1900, tTM->tm_mon + 1, tTM->tm_mday, 
  tTM->tm_hour, tTM->tm_min, tTM->tm_sec, tTimeB.millitm);
  
  //用times函式計算以下迴圈執行花費的時間
  lBeginTime = times(&tTMS);
  printf("lBeginTime = %ld\n", lBeginTime);
  while (1)
  {
    i = i + 1;
    if (i == 0)
      break;
  }
  lEndTime = times(&tTMS);
  printf("lEndTime = %ld\n", lEndTime);
  printf("迴圈使用的CPU時間為: %ld\n", lEndTime - lBeginTime);
  tck = sysconf(_SC_CLK_TCK);//獲取系統時鐘(1秒裡有多少個)
  printf("轉換為秒: %f\n", ((lEndTime - lBeginTime) / (double)tck));
  
  return 0;
}
執行結果:


[[email protected] ~]# ./test10
current time is 1421644980 seconds
2015-01-19 00:23:00
2015-01-19 00:23:00 :781
lBeginTime = 708268851
lEndTime = 708270107
迴圈使用的CPU時間為: 1256
轉換為秒: 12.560000
--------------------- 
作者:謝謝考拉 
來源:CSDN 
原文:https://blog.csdn.net/hou512504317/article/details/51124118 
版權宣告:本文為博主原創文章,轉載請附上博文連結!