Linux C语言获取时间 gettimeofday timeval

计算机课程 同时被 2 个专栏收录
7 篇文章 0 订阅
9 篇文章 0 订阅

timeval 结构体源码,gettimeofday() 的第一个参数

#ifndef __timeval_defined
#define __timeval_defined 1

#include <bits/types.h>

/* A time value that is accurate to the nearest
   microsecond but also has a range of years.  */
struct timeval
{
  __time_t tv_sec;		/* Seconds.  */
  __suseconds_t tv_usec;	/* Microseconds. 1000000 微秒 = 1秒 */
};
#endif

tv_sec 代表多少秒
tv_usec 代表多少微秒 1000000 微秒 = 1秒

使用gettimeofday()来获取时间(1970年1月1日到现在的时间)

#include <sys/time.h>

int gettimeofday(struct timeval*tv, struct timezone *tz);

其参数tv是保存获取时间结果的结构体, 参数tz用于保存时区结果.  timezone 参数若不使用则传入NULL即可。

timezone 结构体如下:

struct timezone{

int tz_minuteswest;/*格林威治时间往西方的时差*/

int tz_dsttime;/*DST 时间的修正方式*/

}

记录时间

//头文件
#include<stdio.h>
#include <sys/time.h>

struct timeval starttime,endtime;

gettimeofday(&starttime,0);
//do things
gettimeofday(&endtime,0);

double timeuse = 1000000*(endtime.tv_sec - starttime.tv_sec) 
                        +endtime.tv_usec - startime.tv_usec;
//timeuse 为微妙
timeuse /=1000;//除以1000则进行毫秒计时,如果除以1000000则进行秒级别计时

printf("%.2lf ms",timeuse); //timeuse类型为double

记录时间 转换为时分秒

//头文件
#include<stdio.h>
#include <sys/time.h>

struct Time{
	int hours;
	int minutes;
	int seconds;
	int milliseconds;//毫秒
	int microsecond;//微秒 
};
int main(){

    struct timeval starttime,endtime;

    gettimeofday(&starttime,0);
    //do things
    gettimeofday(&endtime,0);

    double timeuse = 1000000*(endtime.tv_sec - starttime.tv_sec) 
                        +endtime.tv_usec - startime.tv_usec;

    tomytime(&mytime,time_use); //微秒转化为时分秒毫秒微秒
		
    printf("此程序运行的时间为:%d时%d分%d秒%d毫秒%d微秒",
			                 mytime.hours,mytime.minutes,mytime.seconds,mytime.milliseconds,mytime.microsecond;
}

void tomytime(struct Time *mytime,float time_use){
	mytime->hours=time_use/(1000000*60*60);
	time_use=time_use-mytime->hours*(1000000*60*60);

	mytime->minutes=time_use/(1000000*60);
	time_use=time_use-mytime->minutes*(1000000*60);

	mytime->seconds=time_use/(1000000);
	time_use=time_use-mytime->seconds*(1000000);

	mytime->milliseconds=time_use/(1000);
	time_use=time_use-mytime->minutes*(1000);

	mytime->microsecond=(int)time_use;
}

 

其他语言及windows 计算时间函数:

https://blog.csdn.net/lanshi00/article/details/104563951

  • 2
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值