C C 獲取精確到微秒級的系統時間

2021-06-26 01:35:41 字數 1931 閱讀 3012

最近要為自己的專案開發乙個日誌模組,需要獲取精確到微秒級的系統時間,查閱了一些資料,發現在c/c++裡面可以通過 gettimeofday(struct timeval * tv,struct timezone * tz) 和 localtime(const time_t * timep) 這兩個函式的配合使用來得到我想要的結果。

先貼一下這兩個函式的說明:

gettimeofday

標頭檔案:#include #include

定義函式:int gettimeofday (struct timeval * tv, struct timezone * tz);

函式說明:gettimeofday()會把目前的時間有tv 所指的結構返回,當地時區的資訊則放到tz 所指的結構中。時間是從公元 1970 年1 月1 日的utc 時間從0 時0 分0 秒算起到現在所經過的時間。

timeval 結構定義為:

struct timeval

;timezone 結構定義為:

struct timezone

;localtime

標頭檔案:#include

定義函式:struct tm *localtime (const time_t *timep);

函式說明:localtime()將引數timep 所指的time_t 結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm 返回。

結構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

int tm_year;  //從1900 年算起至今的年數

int tm_wday;  //一星期的日數, 從星期一算起, 範圍為0-6

int tm_yday;  //從今年1 月1 日算起至今的天數, 範圍為0-365

int tm_isdst;  //日光節約時間的旗標

使用localtime函式的時候需要注意計算年份的時候需要加上1900,計算月份的時候需要加1。

使用說明

我們先呼叫gettimeofday函式獲取到從公元 2023年1 月1 日的utc 時間從0 時0 分0 秒算起到現在所經過的秒數加上微秒數,然後將秒數作為引數再呼叫localtime函式,轉換為本地時區的當前時間即可,之後可以使用localtime函式返回的tm結構體物件來獲取具體的年月日時分秒等資料。

示例**如下:

#include #include #include #include #include #include using namespace std;

string fa_getsystime()

; snprintf(stemp, sizeof(stemp), "%04d%02d%02d%02d%02d%02d%03d%03d", ptime->tm_year+1900, \

ptime->tm_mon+1, ptime->tm_mday, ptime->tm_hour, ptime->tm_min, ptime->tm_sec, \

tv.tv_usec/1000,tv.tv_usec%1000);

return (string)stemp;}

int main()

輸出為:

C 獲取系統當前時間 精確到微秒

在除錯 日誌輸出 優化時,我們常常需要獲得系統的時間。在一些效能要求高的 優化時,對時間的精確度還比較高。在網上找不高質量的 便自己研究了一下,如下 能滿足跨平台的要求,單位精確到微秒 ifdef win32 include else include endif wind32 定義64位整形 if ...

redis獲取當前時間精確到微秒

在redis取得當前時的方法為執行time命令 127.0.0.1 6382 time 1 1495780564 2 894089 第一行為以 unix 時間戳格式表示已經過去的秒數 第二行為當前這一秒已經過去的微秒數 所以如果你想獲得當前已經過去的總的微秒數 當前時間戳 可以執行如下 eval l...

獲取系統當前時間(微秒)

在除錯 日誌輸出 優化時,我們常常需要獲得系統的時間。在一些效能要求高的 優化時,對時間的精確度還比較高。在網上找不高質量的 便自己研究了一下,如下 能滿足跨平台的要求,單位精確到微秒 ifdef win32 include else include endif wind32 定義64位整形 if ...