怎么理解C語言中的time函數(shù)

本篇內(nèi)容介紹了“怎么理解C語言中的time函數(shù)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

紅河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

編程中經(jīng)常用到時(shí)間表達(dá)及轉(zhuǎn)換的函數(shù),它們都定義在 time.h 庫函數(shù)中,time函數(shù)的基本形式是time(),這個(gè)函數(shù)的原型是time_t time(time_t *time)

幾個(gè)時(shí)間概念:

1:Coordinated Universal Time(UTC):

協(xié)調(diào)世界時(shí),又稱世界標(biāo)準(zhǔn)時(shí)間,也即格林威治標(biāo)準(zhǔn)時(shí)間(Greenwich Mean Time,GMT),中國內(nèi)地的時(shí)間與UTC得時(shí)差為+8,也即UTC+8,美國為UTC-5。

2:Calendar Time:

日歷時(shí)間,是用"從一個(gè)標(biāo)準(zhǔn)時(shí)間點(diǎn)到此時(shí)的時(shí)間經(jīng)過的秒數(shù)"來表示的時(shí)間。標(biāo)準(zhǔn)時(shí)間點(diǎn)對(duì)不同編譯器可能會(huì)不同,但對(duì)一個(gè)編譯系統(tǒng)來說,標(biāo)準(zhǔn)時(shí)間是不變的。一般是表示距離UTC時(shí)間 1970-01-01 00:00:00的秒數(shù)。

3:epoch:

時(shí)間點(diǎn)。在標(biāo)準(zhǔn)c/c++中是一個(gè)整數(shù),用此時(shí)的時(shí)間和標(biāo)準(zhǔn)時(shí)間點(diǎn)相差的秒數(shù)(即日歷時(shí)間)來表示。

4:clock tick:

時(shí)鐘計(jì)時(shí)單元(而不叫做時(shí)鐘滴答次數(shù)),一個(gè)時(shí)鐘計(jì)時(shí)單元的時(shí)間長短是由cpu控制的,一個(gè)clock tick不是cpu的一個(gè)時(shí)鐘周期,而是c/c++的一個(gè)基本計(jì)時(shí)單位。

time.h 的定義

time.h 頭文件定義了四個(gè)變量類型、兩個(gè)宏和各種操作日期和時(shí)間的函數(shù)。

4個(gè)變量

size_t是無符號(hào)整數(shù)類型,它是 sizeof 關(guān)鍵字的結(jié)果。
clock_t這是一個(gè)適合存儲(chǔ)處理器時(shí)間的類型,類型為unsigned long
time_t這是一個(gè)適合存儲(chǔ)日歷時(shí)間類型。
struct tm這是一個(gè)用來保存時(shí)間和日期的結(jié)構(gòu)。

tm 結(jié)構(gòu)的定義如下:

struct tm
{
   int tm_sec;         /* 秒,范圍從 0 到 59      */
   int tm_min;         /* 分,范圍從 0 到 59      */
   int tm_hour;        /* 小時(shí),范圍從 0 到 23     */
   int tm_mday;        /* 一月中的第幾天,范圍從 1 到 31    */
   int tm_mon;         /* 月,范圍從 0 到 11(注意)  */
   int tm_year;        /* 自 1900 年起的年數(shù)      */
   int tm_wday;        /* 一周中的第幾天,范圍從 0 到 6 */
   int tm_yday;        /* 一年中的第幾天,范圍從 0 到 365   */
   int tm_isdst;       /* 夏令時(shí)               */
};

兩個(gè)宏

NULL這個(gè)宏是一個(gè)空指針常量的值。
CLOCKS_PER_SEC這個(gè)宏表示每秒的處理器時(shí)鐘個(gè)數(shù)。用于將clock()函數(shù)的結(jié)果轉(zhuǎn)化為以秒為單位的量,這個(gè)量的具體值是與操作系統(tǒng)相關(guān)的,通常為1000。

庫函數(shù)

1:clock函數(shù)

函數(shù)原型: clock_t clock(void)

函數(shù)返回:返回clock函數(shù)執(zhí)行起(一般為程序的開頭),處理器時(shí)鐘所使用的時(shí)間。

函數(shù)功能:用來計(jì)算程序或程序的某一段的執(zhí)行時(shí)間。

實(shí)例

#include#includeint main()
{
    clock_t start_t,finish_t;
    double total_t = 0;
    int i = 0;
    start_t = clock();
    for(;i<100000;++i)
    {
        //do someting;
    }
    finish_t = clock();
    total_t = (double)(finish_t - start_t) / CLOCKS_PER_SEC;//將時(shí)間轉(zhuǎn)換為秒
    printf("CPU 占用的總時(shí)間:%f\n", total_t);
    return 0;
}

2:time函數(shù)

函數(shù)原型: time_t time(time_t *timer)

參數(shù)說明: timer=NULL時(shí)得到當(dāng)前日歷時(shí)間(從1970-01-01 00:00:00到現(xiàn)在的秒數(shù)),timer=時(shí)間數(shù)值時(shí),用于設(shè)置日歷時(shí)間,time_t是一個(gè)unsigned long類型。如果 timer不為空,則返回值也存儲(chǔ)在變量 timer中。

函數(shù)功能: 得到當(dāng)前日歷時(shí)間或者設(shè)置日歷時(shí)間

函數(shù)返回: 當(dāng)前日歷時(shí)間

實(shí)例

#include#includeint main ()
{
  time_t seconds;
  seconds = time(NULL);
  printf("自 1970-01-01 起的小時(shí)數(shù) = %ld\n", seconds/3600);
  return(0);
}

3:asctime函數(shù)

函數(shù)原型: char* asctime(struct tm * ptr)

函數(shù)功能:將結(jié)構(gòu)struct tm * ptr所表示的時(shí)間以字符串表示

函數(shù)返回: 返回的時(shí)間字符串格式為:星期,月,日,小時(shí):分:秒,年

參數(shù)說明: 結(jié)構(gòu)指針ptr應(yīng)通過函數(shù)localtime()或gmtime()得到

實(shí)例

#include#includeint main()
{
   struct tm t;//更多情況下是通過localtime函數(shù)及gmtime函數(shù)獲得tm結(jié)構(gòu)
   t.tm_sec    = 10;
   t.tm_min    = 10;
   t.tm_hour   = 6;
   t.tm_mday   = 25;
   t.tm_mon    = 2;
   t.tm_year   = 89;
   t.tm_wday   = 6;
   printf("%s\n",asctime(&t));
   return(0);
}

4:localtime函數(shù)

函數(shù)原型: struct tm *localtime(const time_t *timer)

函數(shù)功能: 使用 timer 的值來填充 tm 結(jié)構(gòu)。timer 的值被分解為 tm 結(jié)構(gòu),并用本地時(shí)區(qū)表示。

函數(shù)返回: 以tm結(jié)構(gòu)表達(dá)的時(shí)間

實(shí)例

#include#includeint main ()
{
   time_t timer;
   struct tm *Now;
   time( &timer );
   Now = localtime( &timer );
   printf("當(dāng)前的本地時(shí)間和日期:%s", asctime(Now));
   return(0);
}

5:ctime函數(shù)

函數(shù)原型: char *ctime(const time_t * timer)

函數(shù)功能: 將日歷時(shí)間參數(shù)timer轉(zhuǎn)換為一個(gè)表示本地當(dāng)前時(shí)間的字符串

函數(shù)返回: 返回字符串格式:星期,月,日,小時(shí):分:秒,年

參數(shù)說明: timer參數(shù)應(yīng)由函數(shù)time獲得,其等價(jià)于 astime( localtime(timer) )

實(shí)例

#include#includeint main ()
{
   time_t curtime;
   time(&curtime);
   printf("當(dāng)前時(shí)間 = %s", ctime(&curtime));
   return(0);
}

6:difftime函數(shù)

函數(shù)原型: double difftime(time_t time2, time_t time1)

函數(shù)功能: 得到兩次機(jī)器時(shí)間差,單位為秒

函數(shù)返回: 時(shí)間差,單位為秒

參數(shù)說明: time1,time2分別表示兩個(gè)不同的機(jī)器時(shí)間,該參數(shù)應(yīng)使用time函數(shù)獲得

實(shí)例

#include#includeint main()  
{  
    time_t first,second;  
    time(&first);  
    sleep(2000);  
    time(&second);
    printf("The difference is: %f seconds",difftime(second,first));  
    return 0;  
}

7:gmtime函數(shù)

函數(shù)原型: struct tm *gmtime(time_t *timer)

函數(shù)功能: 得到以結(jié)構(gòu)tm表示的時(shí)間信息,并用格林威治標(biāo)準(zhǔn)時(shí)間表示

函數(shù)返回: 以結(jié)構(gòu)tm表示的時(shí)間信息指針

參數(shù)說明: timer用函數(shù)time()得到的時(shí)間信息

實(shí)例

#include#include#define BST (+1)
#define CCT (+8)
int main ()
{
   time_t rawtime;
   struct tm *info;
   time(&rawtime);
   /* 獲取 GMT 時(shí)間 */
   info = gmtime(&rawtime );
   printf("當(dāng)前的世界時(shí)鐘:\n");
   printf("倫敦:%2d:%02d\n", (info->tm_hour+BST)%24, info->tm_min);
   printf("中國:%2d:%02d\n", (info->tm_hour+CCT)%24, info->tm_min);
   return(0);
}

8:mktime函數(shù)

函數(shù)原型:time_t mktime(struct tm *timeptr)

函數(shù)功能:把 timeptr 所指向的結(jié)構(gòu)轉(zhuǎn)換為一個(gè)依據(jù)本地時(shí)區(qū)的 time_t 值

函數(shù)返回:該函數(shù)返回一個(gè) time_t 值,該值對(duì)應(yīng)于以參數(shù)傳遞的日歷時(shí)間。如果發(fā)生錯(cuò)誤,則返回 -1 值。

實(shí)例

#include#includeint main ()
{
   int ret;
   struct tm info;
   char buffer[80];
   info.tm_year = 2001 - 1900;
   info.tm_mon = 7 - 1;
   info.tm_mday = 4;
   info.tm_hour = 0;
   info.tm_min = 0;
   info.tm_sec = 1;
   info.tm_isdst = -1;
   ret = mktime(&info);
   if( ret == -1 )
   {
       printf("錯(cuò)誤:不能使用 mktime 轉(zhuǎn)換時(shí)間。\n");
   }
   else
   {
      strftime(buffer, sizeof(buffer), "%c", &info );
      print(buffer);
   }
   return(0);
}

9:strftime函數(shù)

函數(shù)原型: size_t strftime( char *strDest, size_t maxsize, const char *format, const struct tm *timeptr);

函數(shù)功能: 根據(jù)format指向字符串中格式 命令把timeptr中保存的時(shí)間信息放在strDest指向的字符串中,最多向 strDest中存放maxsize個(gè)字符。

參數(shù)說明: 轉(zhuǎn)化結(jié)果存在s中,最多maxsize個(gè)字符寫到s中

函數(shù)返回: 該函數(shù)返回向strDest指向的字符串中放置的字符數(shù)(不包括'\0'),如果字符數(shù)多于maxsize,函數(shù)返回0。

實(shí)例

/*format如下:它們是區(qū)分大小寫的。
    %a 星期幾的簡寫
    %A 星期幾的全稱
    %b 月分的簡寫
    %B 月份的全稱
    %c 標(biāo)準(zhǔn)的日期的時(shí)間串
    %C 年份的后兩位數(shù)字
    %d 十進(jìn)制表示的每月的第幾天
    %D 月/天/年
    %e 在兩字符域中,十進(jìn)制表示的每月的第幾天
    %F 年-月-日
    %g 年份的后兩位數(shù)字,使用基于周的年
    %G 年分,使用基于周的年
    %h 簡寫的月份名
    %H 24小時(shí)制的小時(shí)
    %I 12小時(shí)制的小時(shí)
    %j 十進(jìn)制表示的每年的第幾天
    %m 十進(jìn)制表示的月份
    %M 十時(shí)制表示的分鐘數(shù)
    %n 新行符
    %p 本地的AM或PM的等價(jià)顯示
    %r 12小時(shí)的時(shí)間
    %R 顯示小時(shí)和分鐘:hh:mm
    %S 十進(jìn)制的秒數(shù)
    %t 水平制表符
    %T 顯示時(shí)分秒:hh:mm:ss
    %u 每周的第幾天,星期一為第一天 (值從0到6,星期一為0)
    %U 第年的第幾周,把星期日做為第一天(值從0到53)
    %V 每年的第幾周,使用基于周的年
    %w 十進(jìn)制表示的星期幾(值從0到6,星期天為0)
    %W 每年的第幾周,把星期一做為第一天(值從0到53)
    %x 標(biāo)準(zhǔn)的日期串
    %X 標(biāo)準(zhǔn)的時(shí)間串
    %y 不帶世紀(jì)的十進(jìn)制年份(值從0到99)
    %Y 帶世紀(jì)部分的十進(jìn)制年份
    %z,%Z 時(shí)區(qū)名稱,如果不能得到時(shí)區(qū)名稱則返回空字符。
    %% 百分號(hào)
*/  
#include#includeint main ()
{
   time_t rawtime;
   struct tm *info;
   char buffer[80];
   time( &rawtime );
   info = localtime( &rawtime );
   strftime(buffer,80,"%Y%m%e_%H%M%S", info);//以年月日_時(shí)分秒的形式表示當(dāng)前時(shí)間
   printf("%s\n", buffer );
   return(0);
}

“怎么理解C語言中的time函數(shù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)站標(biāo)題:怎么理解C語言中的time函數(shù)
瀏覽路徑:http://bm7419.com/article10/isghgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、小程序開發(fā)外貿(mào)建站、微信公眾號(hào)、外貿(mào)網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)