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()。此函数返回的时间日期已经转换成当地时区


标题:Linux C语言常用的几种跟时间有关的函数
作者:staymeloo7
联系方式:staycoolsun@gmail.com

    评论
    0 评论
avatar

取消