linux 或c 时间相关处理类型和函数

时间:2023-03-09 19:16:05
linux 或c 时间相关处理类型和函数

注意
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花费的时间

struct timespect *tp用来存储当前的时间,其结构如下:
1 struct timespec {
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)<)
{
temp.tv_sec = end.tv_sec-start.tv_sec-;
temp.tv_nsec = + 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=; i<;i++)
{
;
}
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
temp = diff(time1, time2);
printf("%d:%d\n", temp.tv_sec, temp.tv_nsec);
return ;
}
在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:
#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* 秒–取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值从1900开始 */
int tm_wday; /* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/
};
#define _TM_DEFINED
#endif
ANSI C标准称使用tm结构的这种时间表示为分解时间(broken-down time)。
可以使用的函数是gmtime()和localtime()将time()获得的日历时间time_t结构体转换成tm结构体。
其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。
#include<stdio.h>
#include<time.h> int main()
{
struct tm *ptr;
time_t lt;
lt=time(NULL); ptr=localtime(&lt); printf("second:%d\n",ptr->tm_sec);
printf("hour:%d\n",ptr->tm_hour); }
~
 strftime,是一种计算机函数,strftime() 函数根据区域设置格式化本地时间/日期,函数的功能将时间格式化,或者说格式化一个时间字符串。
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[]; time_t lt1;
time(&lt1); newtime=localtime(&lt1); strftime(tmp,,"today is %A,day %d of $B in the year %Y.\n",newtime);
printf("%s\n",tmp);
}
    struct tm *ttime;
char now[];
time_t tt; memset(now, , );
tt = time(NULL);
ttime = localtime(&tt);
strftime(now, , "%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;
}