Linux编程:time/gettimeofday获取时间戳

Posted 风静如云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux编程:time/gettimeofday获取时间戳相关的知识,希望对你有一定的参考价值。

时间戳:指格林威治时间从1970年1月1日(00:00:00 GMT)至当前时间的总秒数,需要注意的是,时间戳跟时区没有关系,不论在哪个时区,时间戳是一个值。

linux下获得时间戳常用的的方式有两个:

1.通过time函数:

#include <stdio.h>
#include <time.h>

time_t timeStamp()

    time_t time_now = time(NULL); 
    return time_now;


int main(int argc, char *argv[])

    time_t ts = timeStamp();
    printf("timestamp is %ld\\n", ts);
    return 0;

运行程序输出:

timestamp is 1660745869

2.通过gettimeofday

#include <stdio.h>
#include <sys/time.h>

time_t timeStamp()

    struct timeval tv;
    gettimeofday(&tv, NULL);
    return tv.tv_sec;


int main(int argc, char *argv[])

	 time_t ts = timeStamp();
	 printf("timestamp is %ld\\n", ts);
	 return 0;

 运行程序输出:

timestamp is 1660745993

struct timeval
               time_t      tv_sec;            /* seconds */
               suseconds_t tv_usec;    /* microseconds */
;
可见gettimeofday除了可以获得秒数外,还可以获得微秒值。

#include <stdio.h>
#include <sys/time.h>

void printTime()

    struct timeval tv;
    gettimeofday(&tv, NULL);
    printf("timestamp is %ld.%ld\\n", tv.tv_sec, tv.tv_usec);


int main(int argc, char *argv[])

	 printTime(); 
	 return 0;

运行程序输出:

timestamp is 1660748088.804232

需要注意的是time_t所能表示的长度,之前被定义为了long型(4字节),目前在被定义为了long long型(8字节)。

c语言linux打印运行时间(耗时) gettimeofday()timeval<sys/time.h>

#include <stdio.h>
#include <sys/time.h>

double __get_us(struct timeval t)  
	return (t.tv_sec * 1000000 + t.tv_usec); 


int main()
	struct timeval start_time, stop_time;
	gettimeofday(&start_time, NULL);

	//待运行代码

	gettimeofday(&stop_time, NULL);
	printf("Time use %f ms\\n", (__get_us(stop_time) - __get_us(start_time)) / 1000);


示例(在ubuntu16.04上):

test.c

#include <stdio.h>	//使用printf()需要包含
#include <sys/time.h>
#include <unistd.h>	//使用sleep()函数需要包含

double __get_us(struct timeval t) 
	return (t.tv_sec * 1000000 + t.tv_usec);


int main() 
	struct timeval start_time, stop_time;
	gettimeofday(&start_time, NULL);

	//待运行代码
	sleep(1);

	gettimeofday(&stop_time, NULL);
	printf("Time use %f ms\\n", (__get_us(stop_time) - __get_us(start_time)) / 1000);

编译运行结果:

[root@ubuntu /arnold_test/20211227_TEST]12# gcc test.c 
[root@ubuntu /arnold_test/20211227_TEST]13# ./a.out 
Time use 1000.994000 ms

参考文章:C语言linux gettimeofday()函数和time()函数的区别(后者只能得到秒级系统时间,前者能得到毫秒甚至微秒级系统时间)

以上是关于Linux编程:time/gettimeofday获取时间戳的主要内容,如果未能解决你的问题,请参考以下文章

linux下常用的几个时间函数:time,gettimeofday,clock_gettime,_ftime

Linux系统信息与系统资源

awk从入门到入土(19)awk扩展插件,让awk如虎添翼

linux层面算编程吗

Linux高级网络编程系列教程

Linux高级网络编程系列教程