当前位置:网站首页 > 技术博客 > 正文

timeval和timespec



1.结构体定义

timeval结构体在头文件为sys/time.h中,定义如下:

  该结构体以1970-01-01 00:00:00 +0000 (UTC),也就是Unix中的Epoch作为0,之后的时间都是相对于Epoch流逝的秒和毫秒数。其中tv_sec是秒,tv_usec微秒(microsecond ),即10-6秒,而不是毫秒(millisecond),10-3秒。

2. 关联函数

gettimeofday

位于头文件sys/time.h中,函数声明如下:

  用于获取调用该代码时,距离Epoch的时间。

第一个参数不用多说,第二个参数也是结构体,定义如下:

根据Linux的手册中关于函数gettimeofday的描述(man gettimeofday):

The use of the timezone structure is obsolete; the tz argument should normally be specified as NULL

这种使用方式是过时的,该处通常提供NULL作为参数。

测试代码:

运行效果如下(和运行时间有关):

.
.
.
.
.

可以看到,并不是非常精确的1秒延时,多次测试发现延时都会滞后一点不过在一般的应用场合是足够了,例如,我们可以两次调用这个函数,测试一段代码执行所消耗的时间等。

另外一个与之相关的函数是settimeofday,看名字就知道是和gettimeofday对应的,这里就不去展开讨论了。

3. 同日期之间的转换

在获取了相对于Epoch的时间以后,相应的日期也就可以确定了,这个时候就要用到time.h中的结构体struct tm了。结构体定义如下:

与之相关的几个函数分别是gmtimelocaltime、mktime。

先说说将时间戳转换为日期的函数gmtime和localtime,前者是GMT时间,而后者是本地时间,例如现在北京时间是下午16点,则GMT时间实际上是当日的上午8点(我们在东八区,记作GMT+8)。

gmtime定义如下:

接收一个time_t*的指针,然后将其转换为了代表gmt时间的结构体t指针,需要年月日时分秒等,都可以从这个返回的tm结构体中获取,测试代码如下。

这将显示当前的时间,由于使用的是GMT时间,因此,比北京时间慢了8小时,如果使用localtime而不是gmtime的话,则和北京时间相同。

反过来,如果我们向知道某个日期所对应的相对Epoch时间是多少,则可以使用mktime函数,这个函数原型如下:

就是将tm结构体指针转换为time_t,测试代码如下:

版权声明


相关文章:

  • 什么是csrf攻击,xss攻击2025-04-11 11:30:10
  • 游标sql语句2025-04-11 11:30:10
  • 线程中通信2025-04-11 11:30:10
  • seq2seq decoder2025-04-11 11:30:10
  • dbcp配置数据源2025-04-11 11:30:10
  • 拖动验证码是什么原理2025-04-11 11:30:10
  • python 游戏编程入门2025-04-11 11:30:10
  • 文件对比工具 beyond compare2025-04-11 11:30:10
  • html表单总结2025-04-11 11:30:10
  • dd格式文件怎么打开2025-04-11 11:30:10