linux 或c 时间相关处理类型和函数
2015-03-07 17:38 youxin 阅读(604) 评论(0) 编辑 收藏 举报注意
1.精确级别,纳秒级别
原型
long clock_gettime (clockid_t which_clock, struct timespec *tp);
头文件time.h
which_clock参数解释
CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户该成其他,则对应的时间相应改变
CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
2 time_t tv_sec; /* seconds */
3 long tv_nsec; /* nanoseconds */
4 };
#include <stdio.h> #include <time.h> struct timespec diff(struct timespec start,struct timespec end) { struct timespec temp; if((end.tv_nsec-start.tv_nsec)<0) { temp.tv_sec = end.tv_sec-start.tv_sec-1; temp.tv_nsec = 1000000000 + end.tv_nsec-start.tv_nsec; } else { temp.tv_sec = end.tv_sec-start.tv_sec; temp.tv_nsec = end.tv_nsec-start.tv_nsec; } return temp; } int main() { struct timespec time1,time2,temp; int i; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); for(i=0; i<10000;i++) { ; } clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2); temp = diff(time1, time2); printf("%d:%d\n", temp.tv_sec, temp.tv_nsec); return 0; }
#include<stdio.h> 2 #include<time.h> 3 4 int main() 5 { 6 struct tm *ptr; 7 time_t lt; 8 lt=time(NULL); 9 10 ptr=localtime(<); 11 12 printf("second:%d\n",ptr->tm_sec); 13 printf("hour:%d\n",ptr->tm_hour); 14 15 } ~
size_t
strftime
(
char
*strDest,
size_t
maxsize,
const
char
*format,
const
struct
tm
*timeptr
);
#include<stdio.h> #include<time.h> int main() { struct tm* newtime; char tmp[128]; time_t lt1; time(<1); newtime=localtime(<1); strftime(tmp,128,"today is %A,day %d of $B in the year %Y.\n",newtime); printf("%s\n",tmp); }
struct tm *ttime; char now[64]; time_t tt; memset(now, 0, 64); tt = time(NULL); ttime = localtime(&tt); strftime(now, 64, "%Y-%m-%d %H:%M:%S", ttime);
clock函数使用:
http://www.cnblogs.com/youxin/archive/2012/04/15/2450242.html
计算持续时间的长度
有时候在实际应用中要计算一个事件持续的时间长度,比如计算打字速度。在第1节计时部分中,我已经用clock函数举了一个例子。Clock()函数可以精确到毫秒级。同时,我们也可以使用difftime()函数,但它只能精确到秒。该函数的定义如下:
double difftime(time_t time1, time_t time0);
虽然该函数返回的以秒计算的时间间隔是double类型的,但这并不说明该时间具有同double一样的精确度,这是由它的参数觉得的(time_t是以秒为单位计算的)。
更多:
http://blog.csdn.net/limi0066/article/details/1761564
struct itimerval {
struct timeval it_interval;
struct timeval it_value;
}