c++時間有關(guān)的函數(shù)

轉(zhuǎn)載總結(jié)http://blog.csdn.net/luoweifu/article/details/20288549

unix時間戳定義為從當(dāng)前到1970.1.1 0時0分0秒,這中間的秒數(shù)。使用32位表示的時間戳最多到2038年01月19日03時14分07秒。

linux下存儲時間常見的有兩種存儲方式,一個是從1970年到現(xiàn)在經(jīng)過了多少秒,一個是用一個結(jié)構(gòu)來分別存儲年月日時分秒的。
time_t 這種類型就是用來存儲從1970年到現(xiàn)在經(jīng)過了多少秒,要想更精確一點(diǎn),可以用結(jié)構(gòu)struct timeval,它精確到微秒。

struct timeval
{
    long tv_sec; /*秒*/
    long tv_usec; /*微秒*/
};

而直接存儲年月日的是一個結(jié)構(gòu):

struct tm{   
int tm_sec;  /*秒,正常范圍0-59, 但允許至61*/    
int tm_min;  /*分鐘,0-59*/    
int tm_hour; /*小時, 0-23*/    
int tm_mday; /*日,即一個月**中的**第幾天,1-31*/    
int tm_mon;  /*月, 從一月算起,0-11*/  1+p->tm_mon;   
int tm_year;  /*年, 從1900至今已經(jīng)多少年*/  1900+ p->tm_year;    
int tm_wday; /*星期,一周**中的**第幾天, 從星期日算起,0-6*/    
int tm_yday; /*從今年1月1日到目前的天數(shù),范圍0-365*/   
int tm_isdst; /*日光節(jié)約時間的旗標(biāo)*/
};

需要特別注意的是,年份是從1900年起至今多少年,而不是直接存儲如2011年,月份從0開始的,0表示一月,星期也是從0開始的, 0表示星期日,1表示星期一。

函數(shù)

  1. time_t time(time_t *)
    獲取當(dāng)前系統(tǒng)時間,參數(shù)可為NULL
    精確到秒,而且,傳入的參數(shù)和不傳沒啥區(qū)別啊。
  1. struct tm *gmtime(long *)
    將參數(shù)所表示的秒,轉(zhuǎn)化為結(jié)構(gòu)體tm。實(shí)際參數(shù)可以是time_t。
    注意返回的是指針。
    返回的時間是格林威治時間,也就是0時區(qū)的時間。
    不是線程安全的。

  2. struct tm *localtime(const time_t *)
    同上,但是返回的時間是本時區(qū)的時間。
    不是線程安全的。
    使用后的返回值需要立即處理,因?yàn)橄乱淮蔚脑摵瘮?shù)的返回值會覆蓋上一次的。也就是說,如果連續(xù)兩次使用改行數(shù),其返回值是一樣的,后一個函數(shù)的返回值,所以不是線程安全的

  3. struct tm *gmtime_r(const time_t *timep, struct tm *result)和struct tm localtime_r(const time_t *timep, struct tm *result)
    是線程安全的。
    創(chuàng)建值的tm然后傳入。如果創(chuàng)建指針,然后傳入,在運(yùn)行的時候會報錯。
    返回值可以無視,因?yàn)椴⒉粫祷?。讀取會出錯。第二個參數(shù)被填充。

  4. time_t mktime(strcut tm * timeptr);
    上述過程的反向轉(zhuǎn)換

  5. char *asctime(const struct tm *tblock)和 char *ctime(const time_t *time)
    格式化時間,兩個函數(shù)的區(qū)別是,接受的參數(shù)不同。
    形如:Mon Feb 16 11:29:26 2009

7.size_t strftime(char *strDest,size_t maxsize,const char *format,const struct tm *timeptr)
與上一個相同,但是會格式化為我們指定的格式。

8.double difftime(time_t time1, time_t time0)
計算時間間隔才長度。精度為秒。

  1. int gettimeofday(struct timeval*tv,struct timezone *tz )
    把目前的時間用tv 結(jié)構(gòu)體返回,當(dāng)?shù)貢r區(qū)的信息則放到tz所指的結(jié)構(gòu)中,精確到微秒。
    第二個參數(shù)可為空。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ## 可重入函數(shù) ### 可重入性的理解 若一個程序或子程序可以安全的被并行執(zhí)行,則稱其為可重入的;即當(dāng)該子程序正...
    夏至亦韻閱讀 812評論 0 0
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,068評論 0 9
  • 說明本次redis集群安裝在rhel6.8 64位機(jī)器上,redis版本為3.2.8,redis的gem文件版本為...
    讀或?qū)?/span>閱讀 15,651評論 3 9
  • 有一次在同學(xué)的空間看見她在云南麗江拍攝的旅游照片,其中一張是麗江的天空,天是那么的藍(lán),那么高遠(yuǎn),薄薄的幾片白云...
    李小宛閱讀 488評論 6 5

友情鏈接更多精彩內(nèi)容