正文
c语言时间函数效率 c语言时间延迟函数
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
c语言 时间函数
c语言时间函数:
1、获得日历时间函数:
可以通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer);
如果已经声明了参数timer,可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NUL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间:
2、获得日期和时间函数:
这里说的日期和时间就是平时所说的年、月、日、时、分、秒等信息。从第2节我们已经知道这些信息都保存在一个名为tm的结构体中,那么如何将一个日历时间保存为一个tm结构的对象呢?
其中可以使用的函数是gmtime()和localtime(),这两个函数的原型为:
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。比如现在用gmtime()函数获得的世界标准时间是2005年7月30日7点18分20秒,那么用localtime()函数在中国地区获得的本地时间会比世界标准时间晚8个小时,即2005年7月30日15点18分20秒。
关于C语言的时间函数
思路:一般做法都是用指定的时间去和一个固定时间来比较,得出此时间与固定时间所差的天数,一般固定时间都使用“1900-01-01”,比如d1与固定时间的差为Num1天,d2与固定时间的差为Nmu2天,那么d1、d2的天数差就是Num1与Num2间的差值了。最好不要直接用d1和d2来比较,因为不好确定他们之间有多少个闰年、大小月等。
以下代码是我从其它程序中摘出来的,大体上能满足你的需求(使用的中文编程,细节自己修改)
#include stdio.h
#include string.h
typedef unsigned char UNBYTE;
typedef unsigned short UNWORD;
typedef unsigned long UNLONG;
typedef unsigned long DATETIME;
/** 从 0001-01-01 到 1899-12-31 间的天数,故0日期是从1900-01-01开始的 */
const UNLONG n日期开始 = 693594;
/** 时间的转换系数*/
const UNBYTE n每天时数 = 24;
const UNBYTE n每时分数 = 60;
const UNBYTE n每分秒数 = 60;
const UNWORD n每时秒数 = n每分秒数 * n每时分数;
const UNLONG n每天秒数 = n每天时数 * n每时秒数;
typedef enum
{
TRUE = 0x5A,
FALSE = 0
}UBBOOL;
typedef struct
{
UNBYTE ub_年;
UNBYTE ub_月;
UNBYTE ub_日;
UNBYTE ub_时;
UNBYTE ub_分;
UNBYTE ub_秒;
UNBYTE ub_百分秒;
UNBYTE ub_备用;
}S日历时钟; /**8 byte*/
UNBYTE ub_每月天数[2][12] =
{
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
UNBYTE 润年判断(const UNBYTE lub_年)
{
if( (lub_年 % 4 == 0) ((lub_年 % 100 != 0) || (lub_年 % 400 == 0)) )
return 1;
else
return 0;
};
UBBOOL 转换日期(UNBYTE lub_年, UNBYTE lub_月,UNBYTE lub_日, DATETIME lub_日期)
{
UNBYTE lub_日表序号 = 0;
UNWORD luw_年;
int i;
/**根据是否为润年取日表的序号*/
luw_年 = 2000 + lub_年;
lub_日表序号 = 润年判断(luw_年);
lub_日期 = lub_日;
if ( (luw_年 = 2000)
(luw_年 = 2099)
(lub_月 = 1)
(lub_月 = 12)
(lub_日 = 1)
(lub_日 = ub_每月天数[lub_日表序号][lub_月-1]) )
{
/**计算月*/
for( i=0; ilub_月-2; i++ )
{
lub_日期 += ub_每月天数[lub_日表序号][i];
}
luw_年 -= 1;
lub_日期 += (luw_年 * 365) + (luw_年 / 4) - (luw_年 / 100) + (luw_年 / 400) - n日期开始;
return TRUE;
}
else
{
return FALSE;
}
};
UBBOOL 转换时间(UNBYTE lub_时, UNBYTE lub_分, UNBYTE lub_秒, DATETIME lub_时间)
{
if ( (lub_时 n每天时数) (lub_分 n每时分数) (lub_秒 n每分秒数) )
{
lub_时间 = (lub_时 * n每时秒数 + lub_分 * n每分秒数 + lub_秒);
return TRUE;
}
else
{
return FALSE;
}
};
UBBOOL 转换时钟(S日历时钟 ls_时钟, DATETIME ldt_时间)
{
DATETIME dt_日 = 0;
DATETIME dt_秒 = 0;
ldt_时间 = 0;
if ((TRUE == 转换日期(ls_时钟.ub_年, ls_时钟.ub_月, ls_时钟.ub_日, dt_日))
(TRUE == 转换时间(ls_时钟.ub_时, ls_时钟.ub_分, ls_时钟.ub_秒, dt_秒)))
{
ldt_时间 = dt_日 * n每天秒数 + dt_秒;
return TRUE;
}
else
{
return FALSE;
}
};
void main()
{
DATETIME dt,dt2,cha;
S日历时钟 s_now;
S日历时钟 s_now2;
s_now.ub_年 = 9;
s_now.ub_月 = 12;
s_now.ub_日 = 15;
s_now.ub_时 = 23;
s_now.ub_分 = 59;
s_now.ub_秒 = 59;
s_now2.ub_年 = 9;
s_now2.ub_月 = 12;
s_now2.ub_日 = 16;
s_now2.ub_时 = 0;
s_now2.ub_分 = 0;
s_now2.ub_秒 = 1;
if(( TRUE == 转换时钟(s_now, dt))( TRUE == 转换时钟(s_now2, dt2)))
{
cha = dt2-dt;
}
else
puts("error");
//////////////////////////////////////////
}
c语言时间函数!!
time_t nowtime; -- 声明变量 nowtime(现在时间) 为 time_t 型
struct tm *timeinfo; -- 声明变量timeinfo(时间信息)为 tm 型 结构 指针。
time_t , tm 都是 time.h 头文件里定义 的 类型。
time( nowtime ); -- 调系统函数 time(), 获得 现在时间 (1970年起多少个“滴答”,世界标准时间)
timeinfo = localtime( nowtime ); -- 调系统函数, 获得 当地 现在时间 (例如 东8 区,北京时间)。时间数据是 tm 型 结构。
int hour; -- 声明变量 hour (小时),整型。
hour = timeinfo-tm_hour+1 ; -- 结构 timeinfo的成员tm_hour 是时间值,+1 得 hour(小时)。
tm_hour -- 数值范围 0-23。
c语言中头文件中定义的函数为什么效率那么高
1、C标准库的函数只是一些基本功能的封装,很多的效率并不是那么高效,比如strstr函数算法用的朴素的模式匹配,对于长的字符串,效果差劲。当然有的还是可以的,毕竟大多用了比较经典的算法,当对时间有需求选择使用。
2、C语言库基本大部分都是用C语言写的,某些对于时间上有控制那就用汇编语言来写的,不过比较少。你看到的估计是被打包过的dll文件或者lib文件包吧。。这些是实现源文件后被编译成二进制代码了的代码文件打包成的,然后你再去看要么翻译成汇编要么就还是二进制。。。
3、memset源码:
/*memset function*/
#includestring.h
void *(memset)(void *s, int c, size_t n)
{ /* store c throughout unsigned char s[n] */
const unsigned char uc = c;
unsigned char *su;
for (su = s; 0 n; ++su, --n)
*su = uc;
return (s);
}
sizeof不是函数。。是操作符,同“+”、“-”等一样。。编译器通过汇编语言对C语言的定义进行支持。。
怎么用C语言来计算一个函数调用了多久
可以通过计算时间差的方法来计算一个函数调用了多久。
具体细节如下:
计算函数执行时间是评价程序效率的一种常用方法。
可以在调用一个函数之间获取当前时间,在调用之后再次获取当前时间,然后计算二者的时间差。
但是如果一个函数执行时间非常短,会得到两个时间差为0的情况,此时可以修改程序为调用该函数1000次,然后把时间差除以1000。
得到当前时间的方法是:首先程序最前面添加头文件#includetime.h,然后通过调用time(NULL)获取当前时间。
c语言时间函数效率的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言时间延迟函数、c语言时间函数效率的信息别忘了在本站进行查找喔。