Linux 获取时间的方法

xiaoxiao2021-02-28  87

时间的头文件 #include<time.h>

关于时间的类型:

time_t   long 型,表示从1970年1月1日到现在经过的秒数。

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代表一月) - 取值区间为[0,11] */           int tm_year;      /* 年份,其值等于实际年份减去1900 */           int tm_wday;      /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */           int tm_yday;      /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日

 };

struct timeval {                time_t      tv_sec;     /* seconds (秒)*/                suseconds_t tv_usec;    /* microseconds(微秒) */            }; struct timezone {                int tz_minuteswest;     /* minutes west of Greenwich */                int tz_dsttime;         /* type of DST correction */            }; int tz_minuteswest;     /* 格林威治时间往西方的时差 */ int tz_dsttime;         /*  时间的修正方式*/

一般用time_t:定义 time_t now;通过now =time(NULL)返回当前的时间(秒数),time函数形式是“time_t time(time_t*)”,也可以像这样获取“time(&now)”。用户看这个大的Long型数据是没啥意义,一般通过这个函数先后得到时间计算时间差比较方便。srand(unsigned(time(NULL))获取种子的用法运用的就是这个秒数。

想清晰得得到现在的年月日信息,就不能通过这个time_t了,需要用struct tm来显示,而将time_t和struct tm转换的函数就是localtime(time_t*),返回一个struct tm*类型,注意是指针类型。然后可以得到tm中的成员,如上,皆为整形。

mktime() 将时间结构体struct tm的值转化为经过的秒数  time_t mktime(struct tm *tm);

如果想直接获取时间的字符串。

用 char * asctime(const struct tm * timeptr);根据struct tm结构

或者用 char* ctime(time_t* t);//根据time_t

输出的形式都是像这样 "Tue Jan  6 13:53:16 2015 "

上面的时间精度只能达到秒级,但是如果要实现更精细的时间,就必须用下面的方法

clock_gettime()

 函数"clock_gettime"是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。

语法:

#include<time.h> int clock_gettime(clockid_t clk_id,struct timespec *tp); 参数: clk_id : 检索和设置的clk_id指定的时钟时间。 CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时, 中间时刻如果系统时间被用户改成其他,则对应的时间相应改变 CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响 CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间 CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间 struct timespec { time_t tv_sec; /* 秒*/ long tv_nsec; /* 纳秒*/ };  
转载请注明原文地址: https://www.6miu.com/read-54272.html

最新回复(0)