1、gettimeofday函數:獲取到當前時間的秒數。
該函數的頭文件在/usr/include/sys/time.h頭文件中。
函數原型:int gettimeofday(struct timeval*tv, struct timezone *tz);
用到兩個結構體: timeval 和 timezone
這兩個結構體定義在/usr/include/linux/time.h頭文件中。
一秒=1000000微秒
函數作用:會把得到從1970年1月1日0時0分0秒到現在的秒數返回到第一個參數指向的結構體中,第二個參數是關於時區,如果不考慮填入NULL。
函數成功返回0,否則返回-1,錯誤代碼存於errno。
可以利用該函數來計算一個程序的運行時間,只需在程序前后調用該函數,並且后來的函數時間減去開始的函數時間就可以。注意單位的轉變。
2、time()函數:獲取到當前時間的秒數。
time函數聲明:time_t time(time_t *t)
頭文件:<time.h>
由聲明可知,這里有一個特殊類型 time_t類型 ;相當於 long int 類型。函數參數為time_t類型變量的地址。
eg:
time函數接收time_t類型的變量地址為參數,計算返回1970年1月1日00:00:00 到現在的秒數,並存儲在變量中。在實際使用中,一般希望得到的是標准的時間格式,現在只得到了秒數,接下來應該把得到的秒數轉換為時間格式,所以就需要用到localtime()和strftime()函數。只有這些組合使用才能得到標准格式的時間。
特殊:time(NULL);該函數會返回從1970到現在的秒數,但不保存。
3、localtime函數:返回指向tm結構的指針,並且按輸入的秒數填寫結構。
函數聲明:struct tm *localtime(const time_t *timer)
由此可見:該函數接收一個time_t類型的變量地址。
該函數返回指向 tm 結構的指針,該結構帶有被填充的時間信息;
tm 結構體:
struct tm { int tm_sec; /* 秒,范圍從 0 到 59 */ 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; /* 一年中的第幾天,范圍從 0 到 365 */ int tm_isdst; /* 夏令時 */ };
該函數作用是返回指向tm結構的指針,並且按輸入的秒數填寫結構。localtime函數會把秒數划分為各個點時間,但是這樣想要輸出的話只能輸出多個類型;此時應該用到strftime()函數來整合這個被填充了的tm結構;並輸出。
asctime函數:
該函數接收一個指向tm的指針,並且把tm結構體的內容轉換格式,返回一個指向字符串的指針。
4、strftime()和strptime()函數
strptime()函數:把時間格式字符串,按一定格式存儲到tm結構體中。
函數聲明:char *strptime(const char *buf,const char *format,struct tm *timeptr)
該函數有三個參數:
- 時間格式字符串,
- 時間格式。
- tm 結構體的指針
例子: struct tm tm_ptr
strptime("2020-07-29 00:00","%Y-%m-%d %H:%M",&tm_ptr); 該函數的作用是,把第一個參數對應的時間字符串,存儲到tm_ptr結構體中,第二個參數格式要和第一個參數的格式一致。然后再通過strftime()函數轉換成想要的時間格式。
strftime函數:
函數聲明:size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
該函數有四個參數,
- str -- 這是指向目標數組的指針,用來復制產生的 C 字符串。
- maxsize -- 這是被復制到 str 的最大字符數。
- format -- 這是 C 字符串,包含了普通字符和特殊格式說明符的任何組合。這些格式說明符由函數替換為表示 tm 中所指定時間的相對應值
- timeptr -- 這是由localtime函數返回的指向tm結構體的指針。
該函數的作用是,把timeptr指向的結構體內容,根據format格式轉換,並且存儲在str中。