linux_time_Cfun

linux下时间处理

格林尼治时间

  • 所有的UNIX系统都使用同一个时间和日期的起点:格林尼治时间(GMT)1970年1月1 日午夜(0点)。这是“UNIX纪元的起点”,Linux也不例外。Linux系统中所有的时间都以从那时起经过的秒数来衡量。

时间转换关系

image-20240301170335842

其中,虚线表示的三个函数localtime,mktime,strftime受到环境变量TZ的影响,如果定义了TZ,则使用其,如果没有,则使用协调统一时间UTC。

timespec结构体

1
2
3
4
5
6
7
struct timespec
{
...
time_t tv_sec; 秒数
long tv_nsec; 纳秒
...
};

time函数

1
2
3
4
#include <time.h>
time_t time(time_t *t);

//返回值:成功返回时间值;出错返回-1

调用time函数得到底层的时间值,它返回的是从格林尼治时间****开始至今的秒数

time函数还会把返回值写入t指针指向的位置

difftime函数

1
2
3
#include <time.h>

double difftime(time_t time1, time_t time0);

该函数用来计算两个time_t值之间的秒数并以double类型返回它

时钟接口函数(clock_gettime、clock_getres、clock_settime)

时钟通过clockid_t类型进行标识,下面给出了标准值

image-20240301171937859

clock_gettime函数
  • 该函数可用于获取指定时钟的时间,将获取的时钟时间存放在参数2中
  • 当时钟ID设置为CLOCK_REALTIME时,clock_gettime函数提供了与time函数类似的功能,不过在系统支持高精度时间值的情况下,clock_gettime可能比time函数得到更高精度的时间值
clock_getres函数
  • 该函数把参数把参数tsp指向的timespec结构初始化为与clock_id参数对应的时钟精度
  • 例如:如果精度为1毫秒,则timespec结构体的tv_sec字段就被设置为0,tv_nsec字段就被设置为1000000
clock_settime函数
  • 要对特定的时钟设置时间,可以调用clock_settime函数
  • 我们需要适当的特权来更改时钟值,但是有些时钟是不能修改的