C C 技巧 獲取時間

2021-07-26 07:59:04 字數 1822 閱讀 9696

標頭檔案

typedef __time64_t time_t;      /* time value */

使用乙個長整型表示時間,單位為秒。

struct timespec

;

使用兩個變數來表示時間,tv_sec表示格林威治標準時間(gmt)1970-1-1 0:0:0開始到現在的秒數,ty_nsec則表示秒數後面的精度,單位為納秒。

struct tm 

;

用乙個結構體表示具體的日期、時間。

static __inline time_t __crtdecl time(time_t * _time)
該函式返回格林威治標準時間(gmt)1970-1-1 0:0:0開始到現在的秒數,屬於機器時間,即無論處於哪乙個時區,同一時刻該函式所獲取到的機器都是相同的,所以該時間是相對時間。

有了機器時間後,然後就需要將其轉化為本地系統時間或標準時間,可以使用下面一系列函式實現:

static __inline struct tm * __crtdecl gmtime(const time_t * _time)
該函式把機器時間轉換為格林威治時間(gmt)。

static __inline struct tm * __crtdecl localtime(const time_t * _time)
該函式把機器時間轉換為經過時區轉化後的本地時間。

但是通過time()等相關介面獲取的時間精度僅僅在秒級,如果要獲取更高精度的時間,需要借助timespec結構體來獲取微妙級精度。

注意:struct timespec在vc12下的time.h沒有定義,需要用vc14

標頭檔案

struct timeval

;

使用兩個變數來表示時間,tv_sec表示格林威治標準時間(gmt)1970-1-1 0:0:0開始到現在的秒數,ty_usec則表示秒數後面的精度,單位為微秒。

int gettimeofday(struct timeval *tv, struct timezone *tz);

使用timeval精確到毫秒。

int clock_gettime(clockid_t clk_id, struct timespec *tp);
使用timespec精確到微妙。

winbaseapi

void

winapi

getlocaltime(

_out_ lpsystemtime lpsystemtime

);

獲取日期時間,精確到毫秒級。

winbaseapi

bool

winapi

queryperformancefrequency(

_out_ large_integer * lpfrequency

);

winbaseapi

bool

winapi

queryperformancecounter(

_out_ large_integer * lpperformancecount

);

首先獲取windows內部微秒級高精度定時器的頻率(單位為1/s),然後再獲取定時器當前的時鐘次數,次數/頻率=時間。

參考:

c c 獲取時間

方法一 time t time time t timer 可以獲取當前的系統時間,此函式返回的是從公元1970年1月1日0時0分0秒算起到現在所經過的秒數 如果引數不是空指標的話,它也會把返回值設定到入參指標所指物件中 在標頭檔案中,有 typedef long time t,所以time t其實就...

c c 獲取系統時間

方案 優點 僅使用c標準庫 缺點 只能精確到秒級 include include int main void size t strftime char strdest,size t maxsize,const char format,const struct tm timeptr 根據格式字串生成字...

C C 獲取系統時間

在程式設計過程中,經常需要獲取系統時間,例如記錄日誌或資料的時候,需要把時間也記錄下來,現在介紹c c 獲取系統時間的幾種方法吧。1 mfc方法,只適合windows mfc atl程式設計 ctime time ctime getcurrenttime cstring str time.forma...