【c/c++】linux时间获取与时间转换函数总结

[C/C++]Linux时间检索和转换函数概述

编程中的一个常见要求是时间戳处理和模块需要时间。
本文整理了相关的时间函数及其应用场景。

主要函数

时间获取:C++11中引入的Clock、time、gettimeofday、chrono库函数

时间格式转换:ctime、localtime、gmtime、asctime、mktime、strftime

时间差计算:difftime

线程安全转换:ctime_r,localtime_r,asctime_r,gmtime_r

针对特定应用场景的时间检索函数

例如通过chrono::system_lock::获取高精度。
now()时间点。

时间转换函数

ctime可以将时间戳转换为可读的格式。
例如,ctime(&time_buffer)用于格式化strftime(buffer,sizeof(buffer),"%Y-%m-%d%H:%M:%S",&time_val)的输出。

时间差计算函数

通过difftime计算两个时间点之间的差异,如doublediff=difftime(end_time,start_time)。

线程安全的转换函数

例如,ctime_r通过指定的缓冲区和r指向的存储来保证线程之间的独立性,如ctime_r(&time_buffer,&r)。

Linux下的clock_gettime()获取系统时间跳变问题

Linux操作系统中的clock_gettime()函数提供了获取精确时间的功能,并通过指定第一个参数来响应请求。
其中,clk_id参数用于指定检索和设置的时钟时间。
当使用CLOCK_REALTIME时,可能会发生时间跳跃。
此设置中的时钟稳定性较差,并且is_steady属性为false,表明此属性尚未修复。
时间跳跃通常发生在系统进行授时或时间同步操作时,此时可以修改系统时间。
在获取系统时间时,如果使用CLOCK_REALTIME,则需要注意可能出现不稳定的情况。
当需要获取时差或执行定时任务时,应避免直接使用系统时间,以避免时间跳跃造成的不准确。
使用其他稳定的时间采集方式,保证应用的稳定性和准确性。