gettimeofday及其相关时间函数
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中。