C/C++時間函數(shù)(Linux)

獲取當(dāng)前時間最簡單的函數(shù)方法

#include <ctime>

time_t time(time_t* timer);

注:time_t是長整形類型(long int)似舵,返回值為返回距計算機(jī)元年的秒數(shù),一般timer置為NULL贸弥。

使用C++標(biāo)準(zhǔn)庫函數(shù)

參考:C++時間函數(shù)標(biāo)準(zhǔn)庫

函數(shù)原型

#include <ctime>

// time_t是長整形類型(long int)

struct tm
{
    int tm_sec;    // 秒 – 取值區(qū)間為[0,59]
    int tm_min;    // 分 - 取值區(qū)間為[0,59]        
    int tm_hour;   // 時 - 取值區(qū)間為[0,23]        
    int tm_mday;   // 一個月中的日期 - 取值區(qū)間為[1,31]      
    int tm_mon;    // 月份(從一月開始,0代表一月) - 取值區(qū)間為[0,11]       
    int tm_year;   // 年份,其值等于實際年份減去1900
    int tm_wday;   // 星期 – 取值區(qū)間為[0,6]缚俏,其中0代表星期天,1代表星期一贮乳,以此類推 
    int tm_yday;   // 從每年的1月1日開始的天數(shù) – 取值區(qū)間為[0,365]忧换,其中0代表1月1日以此類推
    int tm_isdst;  // 夏令時標(biāo)識符,實行夏令時的時候向拆,tm_isdst為正亚茬。不實行夏令時的時候,tm_isdst為0
};

// 獲取當(dāng)前時間浓恳,返回值為距計算機(jī)元年的秒數(shù)
time_t time (time_t* timer);
// 將tm結(jié)構(gòu)體的時間轉(zhuǎn)換為time_t
time_t mktime (struct tm * timeptr);
// 將tm結(jié)構(gòu)體的時間轉(zhuǎn)換為時間字符串
char* asctime (const struct tm * timeptr);
// 將time_t時間轉(zhuǎn)換為時間字符串
char* ctime (const time_t * timer);
// 將time_t時間轉(zhuǎn)換為世界統(tǒng)一tm結(jié)構(gòu)體時間
struct tm * gmtime (const time_t * timer);
// 將time_t時間轉(zhuǎn)換位tm結(jié)構(gòu)體時間
struct tm * localtime (const time_t * timer);
// 將tm結(jié)構(gòu)體字符串轉(zhuǎn)化為格式化時間字符串
size_t strftime (char* ptr, size_t maxsize, const char* format,  const struct tm* timeptr);

注:strftime格式化函數(shù)的format格式
%a 星期幾的簡寫  
%A 星期幾的全稱  
%b 月分的簡寫  
%B 月份的全稱  
%c 標(biāo)準(zhǔn)的日期的時間串  
%C 年份的后兩位數(shù)字
%d 十進(jìn)制表示的每月的第幾天  
%D 月/天/年  
%e 在兩字符域中刹缝,十進(jìn)制表示的每月的第幾天  
%F 年-月-日  
%g 年份的后兩位數(shù)字,使用基于周的年  
%G 年分颈将,使用基于周的年  
%h 簡寫的月份名  
%H 24小時制的小時  
%I 12小時制的小時  
%j 十進(jìn)制表示的每年的第幾天  
%m 十進(jìn)制表示的月份  
%M 十時制表示的分鐘數(shù)  
%n 新行符  
%p 本地的AM或PM的等價顯示  
%r 12小時的時間  
%R 顯示小時和分鐘:hh:mm  
%S 十進(jìn)制的秒數(shù)  
%t 水平制表符  
%T 顯示時分秒: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)的時間串  
%y 不帶世紀(jì)的十進(jìn)制年份(值從0到99)  
%Y 帶世紀(jì)部分的十制年份  
%z人乓,%Z 時區(qū)名稱,如果不能得到時區(qū)名稱則返回空字符都毒∩#  
%% 百分號

C++時間標(biāo)準(zhǔn)庫函數(shù)之間的關(guān)系

標(biāo)準(zhǔn)庫函數(shù)之間的關(guān)系

示例代碼

#include <iostream>
#include <ctime>
#include <cstring>

using namespace std;

int main()
{
    time_t      curTime;
    time_t      tmToCurTime;
    struct tm   *utcTm;
    struct tm   *curTm;
    char        szTime[40];

    // 獲取當(dāng)前時間
    curTime = time(NULL);
    cout << "Cur Time: " << curTime << endl;

    // 將time_t時間轉(zhuǎn)換為世界統(tǒng)一struct tm結(jié)構(gòu)體時間
    utcTm = gmtime(&curTime);

    // 將time_t時間轉(zhuǎn)換為struct tm結(jié)構(gòu)體時間
    curTm = localtime(&curTime);

    // 將struct tm結(jié)構(gòu)體時間轉(zhuǎn)換為時間字符串
    cout << "struct tm to time string: " << asctime(curTm) << endl;

    // 將struct tm結(jié)構(gòu)體時間轉(zhuǎn)換為time_t
    cout << "struct tm to time_t: " << mktime(curTm) << endl;

    // 將time_t字符串轉(zhuǎn)換為時間字符串
    cout << "time_t to time string: " << ctime(&curTime) << endl;

    // 將struct tm結(jié)構(gòu)體時間轉(zhuǎn)為格式化時間字符串
    memset(szTime, 0, sizeof(szTime));
    strftime(szTime, sizeof(szTime) - 1, "%F %T", curTm);
    cout << "Format time string: " << szTime << endl;

    return 0;
}

執(zhí)行結(jié)果

Cur Time: 1474986855
struct tm to time string: Tue Sep 27 22:34:15 2016

struct tm to time_t: 1474986855
time_t to time string: Tue Sep 27 22:34:15 2016

Format time string: 2016-09-27 22:34:15

使用linux系統(tǒng)函數(shù)

參考:Linux系統(tǒng)函數(shù)標(biāo)準(zhǔn)庫

函數(shù)原型

#include<sys/time.h>

// timeval 結(jié)構(gòu)體
struct timeval
{    
    long tv_sec;   //秒    
    long tv_usec;  //微秒
};

// timezone 結(jié)構(gòu)體
struct timezone
{
    int tz_minuteswest;  // 和Greenwich 時間差了多少分鐘    
    int tz_dsttime;      // DST時間的修正方式
};

// 獲取當(dāng)前時間
int gettimeofday(struct timeval*tv, struct timezone *tz);

示例代碼

#include <iostream>
#include <sys/time.h>

using namespace std;

int main()
{
    struct timeval  tv;
    struct timezone tz;

    gettimeofday(&tv, &tz);

    // 返回秒
    cout << "seconds: " << tv.tv_sec << endl;
    // 返回毫秒
    cout << "microseconds: " << tv.tv_usec << endl;

    // 返回和Greenwich 時間差了多少分鐘
    cout << tz.tz_minuteswest << endl;
    // 返回DST時間的修正方式
    cout << tz.tz_dsttime << endl;

    return 0;
}

執(zhí)行結(jié)果

seconds: 1474989732
microseconds: 105807
0
0

綜合使用C++標(biāo)準(zhǔn)函數(shù)庫和Linux系統(tǒng)函數(shù)

格式化輸出微秒級當(dāng)前的時間(可在C++項目日志打印中使用)

#include <iostream>
#include <sys/time.h>
#include <sstream>
#include <cstring>

using namespace std;

string GetCurrentFormatTimeString()
{
    struct timeval  tv;
    char            timeArray[40];
    stringstream    ss;

    gettimeofday(&tv, NULL);

    memset(timeArray, 0, sizeof(timeArray));

    strftime(timeArray, sizeof(timeArray) - 1, "%F %T", localtime(&tv.tv_sec));

    ss << string(timeArray) << "." << tv.tv_usec;

    return ss.str();
}

int main()
{
    cout << GetCurrentFormatTimeString() << endl;

    return 0;
}

執(zhí)行結(jié)果

2016-09-27 23:52:35.225960
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市账劲,隨后出現(xiàn)的幾起案子戳护,更是在濱河造成了極大的恐慌,老刑警劉巖涤垫,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姑尺,死亡現(xiàn)場離奇詭異,居然都是意外死亡蝠猬,警方通過查閱死者的電腦和手機(jī)切蟋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榆芦,“玉大人柄粹,你說我怎么就攤上這事喘鸟。” “怎么了驻右?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵什黑,是天一觀的道長。 經(jīng)常有香客問我堪夭,道長愕把,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任森爽,我火速辦了婚禮恨豁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爬迟。我一直安慰自己橘蜜,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布付呕。 她就那樣靜靜地躺著计福,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徽职。 梳的紋絲不亂的頭發(fā)上象颖,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音姆钉,去河邊找鬼力麸。 笑死,一個胖子當(dāng)著我的面吹牛育韩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播闺鲸,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼筋讨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了摸恍?” 一聲冷哼從身側(cè)響起悉罕,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎立镶,沒想到半個月后壁袄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡媚媒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年嗜逻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缭召。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡栈顷,死狀恐怖逆日,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萄凤,我是刑警寧澤室抽,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站靡努,受9級特大地震影響坪圾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惑朦,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一兽泄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧行嗤,春花似錦已日、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至栈雳,卻和暖如春护奈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哥纫。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工霉旗, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛀骇。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓厌秒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親擅憔。 傳聞我的和親對象是個殘疾皇子鸵闪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容