1. 用linux shell 计算两个时间差
start=`date +%s -d "2011-11-28 15:55:37"`
end=`date +%s -d "2011-11-28 15:55:52"`
echo $(($end-$start))
这个前提是你能拿到开始和结束时间字串的基首手础余芹握上的。
如果你的日志文件输出格式是上述的话,还有个方法:
cat 日志文件 | awk '/^000/{
start=$2 " " $3
end=$4 " " $5
stm=mktime(gensub(/[:-]/, " ", "g", start))
etm=mktime(gensub(/[:-]/, " "竖庆, "g", end))
print $1 " - " etm-stm
}'
2. 【c/c++】linux时间获取与时间转换函数总结
在编程中,处理时间戳和模块耗时是常见的需求,本文将对相关时间函数及其应用场景进行梳理。
获取时间:clock, time, gettimeofday, C++11引入的chrono库函数
时间格式转换:ctime, localtime, gmtime, asctime, mktime,以及strftime
计算时间差:difftime
线程安全转换:ctime_r, localtime_r, asctime_r, gmtime_r
例如,通过chrono::system_clock::now()获取高精度时间点。
ctime可将时间戳转化为可读格式,如ctime(&time_buffer);strftime用于格式化输出,如strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &time_val)。
通过difftime计算两个时间点的差值,如double diff = difftime(end_time, start_time)。
如ctime_r通过指定的buffer和r指向的存储区域,保证了线程间的独立性,如ctime_r(&time_buffer, &r)。