C語言中時間總結

2021-07-02 02:21:55 字數 3341 閱讀 5888

在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。堆 ...