在c語言涉及中經常需要定時觸發事件,涉及到獲取系統時間,其結構體型別有多種。unix/linux系統下有以下幾種時間結構:
1、time_t 型別:長整型,一般用來表示從1970-01-01 00:00:00時以來的秒數,精確度:秒;由函式time()獲取;
該型別定義在標頭檔案 /usr/include/sys/time.h 中:
#define _time_t
typedef long time_t;
#endif
函式定義:time_t time(time_t* lpt);
如:time_t time = time(null);
2、struct timeb 結構:它有兩個主要成員,乙個是秒,另乙個是毫秒;精確度:毫秒(10e-3秒);
由函式ftime()獲取struct timeb結構的時間;其定義如下:
struct timeb
上述兩個結構都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態如下
dst_none
dst_usa
dst_aust
dst_wet
dst_met
dst_eet
dst_can
dst_gb
dst_rum
dst_tur
dst_austalt
4、struct timespec 結構:它是posix.4標準定義的乙個時間結構,精確度:納秒(10e-9秒);
由函式gethrestime()或gethrestime_lasttick()獲取當前系統struct timespec結構的時間;其定義如下:
struct timespec
;typedef struct timespec timespec_t;
該結構定義在頭頭檔案 /usr/include/sys/time_impl.h 中;
extern void gethrestime(timespec_t*);
extern void gethrestime_lasttick(timespec_t*);
5、clock_t 型別:由函式clock()獲取;
#include
clock_t clock(void);
該函式以微秒的方式返回cpu的時間;
型別 clock_t 定義在標頭檔案/usr/include/sys/types.h中:
#ifndef _clock_t
#define _clock_t
typedef long clock_t;
#endif
6、struct tm 結構:由函式gmtime()解析time_t得到
struct tm*gmtime(const time_t*timep);
函式說明:gmtime()將引數timep 所指的time_t 結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後
將結果由結構tm返回。
結構tm的定義為
struct tm
;int tm_sec 代表目前秒數,正常範圍為0-59,但允許至61秒
int tm_min 代表目前分數,範圍0-59
int tm_hour 從午夜算起的時數,範圍為0-23
int tm_mday 目前月份的日數,範圍01-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 日光節約時間的旗標
此函式返回的時間日期未經時區轉換,而是utc時間。
返回值:返回結構tm代表目前utc 時間
7、unix對時間單位的定義:
#define sec 1 // 秒
#define millisec 1000 // 毫秒
#define microsec 1000000 // 微秒
#define nanosec 1000000000 // 納秒
8、時間格式化函式:
size_t strftime(char *str,size_t max,char *fmt,struct tm *tp); strftime有點像sprintf,其格式由fmt來指定。
%a : 本第幾天名稱,縮寫
%a : 本第幾天名稱,全稱
%b : 月份名稱,縮寫
%b : 月份名稱,全稱
%c : 與ctime/asctime格式相同
%d : 本月第幾日名稱,由零算起
%h : 當天第幾個小時,24小時制,由零算起
%i : 當天第幾個小時,12小時制,由零算起
%j : 當年第幾天,由零算起
%m : 當年第幾月,由零算起
%m : 該小時的第幾分,由零算起
%p : am或pm
%s : 該分鐘的第幾秒,由零算起
%u : 當年第幾,由第乙個日開始計算
%w : 當年第幾,由第乙個一開始計算
%w : 當第幾日,由零算起
%x : 當地日期
%x : 當地時間
%y : 兩位數的年份
%y : 四位數的年份
%z : 時區名稱的縮寫
%% : %符號
char * strptime(char *s,char *fmt,struct tm *tp); 如同scanf一樣,解譯字串成為tm格式
%h : 與%b及%b同
%c : 讀取%x及%x格式
%c : 讀取%c格式
%e : 與%d同
%d : 讀取%m/%d/%y格式
%k : 與%h同
%l : 與%i同
%r : 讀取"%i:%m:%s %p"格式
%r : 讀取"%h:%m"格式
%t : 讀取"%h:%m:%s"格式
%y : 讀取兩位數年份
%y : 讀取四位數年份
例項:
#include #include #include #include #include #include using namespace std;
int main(int argc, char *argv)
C語言中獲取時間記錄
最近在網路上找了乙個cpu和gpu矩陣乘法對比的demo 在linux中執行,一直報錯 error identifier gettickcount is undefined 這是因為gettickcount是windows中的函式,需要引入標頭檔案windows.h,當然,在linux中這種方法並不...
C語言中的時間轉換
c語言關於時間轉換的函式在標頭檔案和中,其中中包含了各種操作時間和日期的函式,中包換結構體timeb,可以用來獲取ms級別的時間 可利用標頭檔案中的兩個結構體獲取ms級的執行時間,統計程式的時間複雜度 struct timeb include include using namespace std ...
c語言中static用法總結
一 c程式儲存空間布局 c程式一直由下列部分組成 正文段 cpu執行的機器指令部分 乙個程式只有乙個副本 唯讀,防止程式由於意外事故而修改自身指令 初始化資料段 資料段 在程式中所有賦了初值的全域性變數,存放在這裡。非初始化資料段 bss段 在程式中沒有初始化的全域性變數 核心將此段初始化為0。堆 ...