Linux C语言常用的几种跟时间有关的函数
前言
工作中需要使用时间戳,因此专门了解了下Linux中常用的几种跟时间有关的函数。
正文
先看几个时间结构体:
- 在<time.h>中的tm结构体和timespec结构体
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代表一月) - <span style="color:#cc0000;">取值区间为[0,11]</span> */
int tm_year; /* 年份,其值从1900开始 */
int tm_wday; /* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/
};
struct timespec {
time_t tv_sec; // seconds
long tv_nsec; // and nanoseconds
};
- 在<sys/time.h>中的timeval结构体
struct timeval
{
__time_t tv_sec; /* Seconds. */
__suseconds_t tv_usec; /* Microseconds. */
};
timeval结构体精确到微秒,timespec结构体精确到纳秒(配合clock_gettime()使用)
- 接下来介绍几个常用的与时间有关的函数
int gettimeofday ( struct timeval * tv , struct timezone * tz )
gettimeofday() 函数提供微秒级精确度,可以获得当前系统的时间,并且是绝对值,第二个参数填NULL即可。
time_t time(time_t * timer)
time() 函数提供秒级精确度,与其他函数结合(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。
int clock_gettime(clockid_t clk_id, struct timespect *tp);
/*参数说明:
clockid_t clk_id 用于指定计时时钟的类型,有以下4种:
CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户该成其他,则对应的时间相应改变
CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
struct timespect *tp用来存储当前的时间,其结构如下:
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
返回值。0成功,-1失败*/
clock_gettime() 函数提供纳秒级精确度。
struct tm *localtime(const time_t * timep);
localtime() 将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm 返回。结构tm 的定义请参考gmtime()。此函数返回的时间日期已经转换成当地时区
评论
0 评论