C語言裡面常用的時間日期函數總結

來源:互聯網
上載者:User

時間類型定義:

       標頭檔:time.h    

       定義為:time_t     某些系統定義為 typedef long time_t

 

擷取時間函數:time_t time(time_t * timer);

           time_t time_now;

           time(&time_now);

 

輸出時間函數:char *ctime(const time_t *time);

           printf(“%s”,ctime(&time_now));

 

轉化時間函數:struct tm *localtime(const time_t *clock);

           struct tm *tmp = localtime(&time_now);

           tmp->tm_mon 表示月份

           tmp->tm_day 表示年

       struct tm的裡面的元素是秒,分,時,日,月,年,夏令時標誌。

 

反轉函數:time_t mktime(strcut tm * timeptr);

       改函數使用需要謹慎,因為有可能遇到各種各樣的日期格式!

 

計算時間差值:double difftime(time_t time2, time_t time1);

       返回time2-time1的值,傳回值是double型!

 

注1:

       擷取時間之後,使用locatime函數進行轉換,輸出的日期需要月份加1,年份加1900。因為所求出的秒數是從1970.1.1 00:00:00 至今擷取的。

       如下面的程式:

#include <time.h><br />#include <stdio.h><br />#include <stdlib.h></p><p>int main(int argc,char *argv[])<br />{<br /> time_t now;<br /> struct tm *tm1;<br /> time(&now); //擷取目前時間(本地時間)<br /> tm1 = localtime(&now); //轉換成struct tm*<br /> printf(“%4d-%d-%2d/n”,tm1->tm_year+1900,tm1->tm_mon+1,tm1->tm_mday); //輸出年月日<br /> return 0;<br />}<br />

 

注2:

        以上的時間都是取的本地時間,而本地時間和UTC是有區別的,也就是格林威治時間。

若想擷取格林威治時間,使用函數gmtime();

struct tm *gmtime(const time_t *tp);   //將本地時間轉換為格林威治時間。

 

注3:

       在一些系統中,time_t被定義為:typedef long time_t,如果這樣的話,最大的時間是什麼時候?下面程式實現之:

time_t max_time = 0x7FFFFFFF; //這裡為什麼不是FFFFFFFF?因為必須定義為無符號數;<br /> printf(“%s”,ctime(&max_time)); //輸出時間

輸出結果為:

        Tue Jan 19 11:14:07 2038

這說明,到了這個時刻,時間計數將從0開始,系統就是面臨著重大的bug。如何解決這個問題,以下是個人猜想:定義時間為 typedef long long time_t;

這樣,儲存的秒數則為231,除以一年的秒數(365*24*60*60),應該是夠用的了!

而像是定義為 long long 型,該怎麼儲存計算呢?

如果是64位的系統,則電腦一次定址可以是64位,也就是完全可以勝任;

如果是32位的系統,應該定義成數組,類似的a[2]來實現之。

 

注4:

       在使用夏令時轉換的時候,一天並不是24小時,所以使用86400秒/天時需要注意。

 

注5:

        其它的時間函數,這裡就不詳細講了。

        clock_t clock(void);

        char *asctime(const struct tm *tp);

        size_t strftime(char *s,size_t smax,const char *fmt,congst struct tm *tp);

        儒略日數方案(Jnlian day numbers);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.