C C 時間函式的使用

2021-06-27 12:48:34 字數 4266 閱讀 6039

一、獲取日曆時間

time_t是定義在time.h中的乙個型別,表示乙個日曆時間,也就是從2023年1月1日0時0分0秒到此時的秒數,原型是:

typedef long time_t;        /* time value */

可以看出time_t其實是乙個長整型,由於長整型能表示的數值有限,因此它能表示的最遲時間是2023年1月18日19時14分07秒。

函式time可以獲取當前日曆時間時間,time的定義:

time_t time(time_t *)

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

intmain(

void

)    

輸出結果:1268575163

二、獲取本地時間

time_t只是乙個長整型,不符合我們的使用習慣,需要轉換成本地時間,就要用到tm結構,time.h中結構tm的原型是:

struct tm ;

可以看出,這個機構定義了年、月、日、時、分、秒、星期、當年中的某一天、夏令時。可以用這個結構很方便的顯示時間。

用localtime獲取當前系統時間,該函式將乙個time_t時間轉換成tm結構表示的時間,函式原型:

struct tm * localtime(const time_t *)

使用gmtime函式獲取格林尼治時間,函式原型:

struct tm * gmtime(const time_t *)

為了方便顯示時間,定義了乙個函式void dsptime(const struct tm *);

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

void

dsptime(

const

struct

tm*); 

//輸出時間。

intmain(

void

)    

void

dsptime(

const

struct

tm* ptm)  

;  cout << ptm->tm_year+1900 << "年"

<< ptm->tm_mon+1 << 

"月"<< ptm->tm_mday << 

"日 "

;  cout << ptm->tm_hour << ":"

<< ptm->tm_min << 

":"<< ptm->tm_sec <<

" ";  

cout << " 星期"

" 當年的第"

<< ptm->tm_yday << 

"天 "

<< endl;  

}  

輸出結果:

1268575163

2023年3月14日 21:59:23  星期日 當年的第72天

2023年3月14日 13:59:23  星期日 當年的第72天

三、輸出時間

c/c++語言提供了用字串格式表示時間的函式。

char * asctime(const struct tm *)

char * ctime(const time_t *)

這兩個函式返回值都是乙個表示時間的字串,區別在於傳入的引數不同。

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

intmain(

void

)    

輸出結果:

1268575163

sun mar 14 13:59:23 2010

sun mar 14 21:59:23 2010

四、計算時間間隔

可以通過difftime來計算兩個時間的間隔,可以精確到秒,函式原型:

double difftime(time_t, time_t)

要想精確到毫秒,就要使用clock函式了,函式原型:

clock_t clock(void)

從定義可以看出clock返回乙個clock_t型別,這個型別也定義在time.h中,原型是: 

typedef long clock_t

clock_t也是乙個長整型,表示的是從程式開始執行到執行clock函式時所經過的cpu時鐘計時單元數。

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

intmain(

void

)    

輸出結果:

請按任意鍵繼續. . .

時間差:3

clock時間差:3094

在time.h中定義了乙個clocks_per_sec

/* clock ticks macro - ansi version */

#define clocks_per_sec  1000

表示1秒鐘內有多少個時鐘計時單元,在標準c/c++中,最小的計時單位是1毫秒。

五、自定義時間格式

c/c++在time.h中提供了乙個自定義時間格式的函式strftime,函式原型:

size_t strftime(char *strdest, size_t maxsize, const char *format, const struct tm *timeptr);

引數說明:

char *strdest:用來存放格式化後的字串快取,

size_t maxsize:指定最多可以輸出的字元數,

const char *format:格式化字串,

const struct tm *timeptr:要轉換的時間。

可使用的格式化字串:

%a 星期幾的簡寫 

%a 星期幾的全稱 

%b 月分的簡寫 

%b 月份的全稱 

%c 標準的日期的時間串 

%c 年份的後兩位數字 

%d 十進位制表示的每月的第幾天 

%d 月/天/年 

%e 在兩字元域中,十進位制表示的每月的第幾天 

%f 年-月-日 

%g 年份的後兩位數字,使用基於周的年 

%g 年分,使用基於周的年 

%h 簡寫的月份名 

%h 24小時制的小時 

%i 12小時制的小時

%j 十進位制表示的每年的第幾天 

%m 十進位制表示的月份 

%m 十時制表示的分鐘數 

%n 新行符 

%p 本地的am或pm的等價顯示 

%r 12小時的時間 

%r 顯示小時和分鐘:hh:mm 

%s 十進位制的秒數 

%t 水平製表符 

%t 顯示時分秒:hh:mm:ss 

%u 每週的第幾天,星期一為第一天 (值從0到6,星期一為0)

%u 第年的第幾周,把星期日做為第一天(值從0到53)

%v 每年的第幾周,使用基於周的年 

%w 十進位制表示的星期幾(值從0到6,星期天為0)

%w 每年的第幾周,把星期一做為第一天(值從0到53) 

%x 標準的日期串 

%x 標準的時間串 

%y 不帶世紀的十進位制年份(值從0到99)

%y 帶世紀部分的十進位制年份 

%z,%z 時區名稱,如果不能得到時區名稱則返回空字元。

%% 百分號

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

intmain(

void

)    

輸出結果:

1268575163

格式化輸出:2010-03-14 21:59:23

C C 時間函式的使用

一 獲取日曆時間 time t是定義在time.h中的乙個型別,表示乙個日曆時間,也就是從1970年1月1日0時0分0秒到此時的秒數,原型是 typedef long time t time value 可以看出time t其實是乙個長整型,由於長整型能表示的數值有限,因此它能表示的最遲時間是203...

C C 時間函式的使用

一 獲取日曆時間 time t是定義在time.h中的乙個型別,表示乙個日曆時間,也就是從1970年1月1日0時0分0秒到此時的秒數,原型是 typedef long time t time value 可以看出time t其實是乙個長整型,由於長整型能表示的數值有限,因此它能表示的最遲時間是203...

C C 時間函式

1 time函式 標頭檔案 time.h 函式定義 time t time time t t 說明 返回從1970年1月1日的utc時間從0時0分0妙算起到現在所經過的秒數。include include int main 輸出 1302079744 1302079744 附 time t 一路追蹤...