C++中怎么计算两个时间的时间差????????
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中怎么计算两个时间的时间差????????相关的知识,希望对你有一定的参考价值。
//得到录像总时间,单位/s
int byear=m_pstrFileVector[nitem]->stBeginTime.year;
int bmonth=m_pstrFileVector[nitem]->stBeginTime.month;
int bday=m_pstrFileVector[nitem]->stBeginTime.day;
int bhour=m_pstrFileVector[nitem]->stBeginTime.hour;
int bminute=m_pstrFileVector[nitem]->stBeginTime.minute;
int bsecond=m_pstrFileVector[nitem]->stBeginTime.second;
int nyear=m_pstrFileVector[nitem]->stEndTime.year;
int nmonth=m_pstrFileVector[nitem]->stEndTime.month;
int nday=m_pstrFileVector[nitem]->stEndTime.day;
int nhour=m_pstrFileVector[nitem]->stEndTime.hour;
int nminute=m_pstrFileVector[nitem]->stEndTime.minute;
int nsecond=m_pstrFileVector[nitem]->stEndTime.second;
第一种是很直观的算法,比如说从2005年4月3日-2017年6月27日。第一步先算2005年4月3日到2005年12月31日有几天,第二步算2006年到2016年共有几个完整年合计多少天,第三步算2017年1月1日到2017年6月27日有几天,最后把三个相加起来就行了。这里面必须考虑如果起止日期是同一年要怎么办?不完整年中计算日期的时候是否是闰年,有无计算到2月份的天数,完整年中有几个闰年,稍一不注意就会出错,所以不推荐。
第二种算法是找个时间原点,然后分别计算两个日期到时间原点的天数,然后比较相差多少天。比如,选择公元1年1月1日作为时间原点,然后写一个函数,可以计算出某个日期到公元1年1月1日的天数。这样把两个天数相减,很容易就能得到两个日期相差的天数。比如写一个这样的函数 int Days(int y,int m,int d),可以计算y年m月d日到公元1年1月1日有几天。然后比如要计算2005年4月3日到2017年6月27日有几天就可以直接:daynum=Days(2017,6,27)-Days(2005,4,3);而且这样可以反复使用,可以针对很多不同的日期,不用一个个去考虑这么多因素。具体的Days函数代码如下:
int Days(int y,int m,int d) //求某日期到公元1年1月1日的天数
int day;
day=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400; //先算完整年的天数
/*上面是计算完整年的天数,比如2005年到公元1年1月1日,就有2004个完整年,所以要(y-1)*365天;其中有几个可以被4整除的年份就有几个闰年,所以要加上(y-1)/4天;再然后,被4整除的年份中,如果可以被100整除的又不是闰年,要减回来;最后,能被100整除,又能被400整除的又是闰年,又要再加回去,所以完整年的天数计算方法就如上式*/
switch(m-1) //算完整月的天数
/*用一组case语句算完整月的天数,比如4月3日,完整月就是从3月份+2月份+1月份共三个月,如果是12月5日,完整月就是从11月份一直加到1月份,所以要switch(m-1),而不是switch(m)*/
case 11:day+=30;
case 10:day+=31;
case 9:day+=30;
case 8: day+=31;
case 7: day+=31;
case 6: day+=30;
case 5: day+=31;
case 4: day+=30;
case 3: day+=31;
case 2: if((y%4==0&&y%100!=0)||y%400==0) day+=29;
else day+=28;//2月份要考虑是否闰年
case 1: day+=31;
case 0: day+=0;
day+=d; //最后再加上本月的日期
return day; 参考技术A C的time()方法等
MFC的CTimeSpan类 参考技术B 这开始的年月日时分秒有了,结束的年月日时分秒也有了,作差不是时长吗?你想得到什么样的结果?追问
有闰年上面的啊,每月的天数不一样,如果日期,跨月,就不好搞了。。。
追答struct Delta //日期差结构体Delta()
days = 0;
hours = 0;
minutes = 0;
seconds = 0;
short days; //相差的天数
short hours; //相差的小时数
short minutes; //相差的分钟数
short seconds; //相差的秒数
;
//日期类
class SDate
public:
SDate(); //无参构造函数
SDate(short year, short month, short day, short hour, short minute, short second);
~SDate();
private:
short year;
short month;
short day;
short hour;
short minute;
short second;
private:
int IsLeapYear(short year); //是否是闰年
int DaysOfOneYear(SDate sd); //该年天数
int SDateToAbsDays(SDate sd);//日期转换成绝对天数
int DaysBetweenTwoDate(SDate sd1, SDate sd2); //两个日期的天数差
public:
Delta TimeBetweenTwoDate(SDate sd1, SDate sd2); //两个日期的时间差
;
////////////////////////////////////////////////////////////////////////////////
网上的代码我改了改,以上是头文件,cpp放附件了,基本可以实现功能,你根据需要随意删改。
使用时SDate date1(2015,1,1,23,45,56);
SDate2(2015,3,1,23,2,4);
Delta delta = date1.TimeBetweenTwoDate(date1,date2); //这里得到的就是日期差结构体
C语言中如何计算时间差
如何将两个包含“年月日时分”的5个字节数据进行比较,最后得出一个时间间隔(总分钟数)?
其中的年份用后两位表示,如2010年8月31日9时26分表示为:1008310926
最后输出必须是时间差(总的分钟)
补充:在KEIL C中编译没有time.h这个头文件调用怎么办?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
unsigned char time1[] = 10, 8, 31, 9, 26 ;
unsigned char time2[] = 10, 8, 31, 9, 50 ;
struct tm t1 = 0;
struct tm t2 = 0;
time_t _t1;
time_t _t2;
double diff;
t1.tm_year = time1[0] + 100;
t1.tm_mon = time1[1];
t1.tm_mday = time1[2];
t1.tm_hour = time1[3];
t1.tm_min = time1[4];
t2.tm_year = time2[0] + 100;
t2.tm_mon = time2[1];
t2.tm_mday = time2[2];
t2.tm_hour = time2[3];
t2.tm_min = time2[4];
_t1 = _mkgmtime( &t1 );
_t2 = _mkgmtime( &t2 );
diff = difftime(_t2, _t1 );
printf( "相差 %.0f 分钟\\n", diff / 60 );
扩展资料:
C语言中有两个相关的函数用来计算时间差,分别是:
time_t time( time_t *t) 与 clock_t clock(void)
头文件: time.h
计算的时间单位分别为: s , ms
time_t 和 clock_t 是函数库time.h 中定义的用来保存时间的数据结构
返回值:
1、time : 返回从公元1970年1月1号的UTC时间从0时0分0秒算起到现在所经过的秒数。如果参数 t 非空指针的话,返回的时间会保存在 t 所指向的内存。
2、clock:返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。 1单元 = 1 ms。
所以我们可以根据具体情况需求,判断采用哪一个函数。
具体用法如下例子:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main()
time_t c_start, t_start, c_end, t_end;
c_start = clock(); //!< 单位为ms
t_start = time(NULL); //!< 单位为s
system("pause");
c_end = clock();
t_end = time(NULL);
//!<difftime(time_t, time_t)返回两个time_t变量间的时间间隔,即时间差
printf("The pause used %f ms by clock()\\n",difftime(c_end,c_start));
printf("The pause used %f s by time()\\n",difftime(t_end,t_start));
system("pause");
return 0;
因此,要计算某一函数块的占用时间时,只需要在执行该函数块之前和执行完该函数块之后调用同一个时间计算函数。再调用函数difftime()计算两者的差,即可得到耗费时间。
参考技术A1、获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t timer0 )。 精确到秒。
测试程序如下:
#include
#include
int main()
time_t start ,end ;
double cost;
time(&start);
sleep(1);
time(&end);
cost=difftime(end,start);
printf("%f/n",cost);
return 0;
本程序在fedora9测试通过。
关于代码中的sleep函数,需要注意的是:
1)在windows下,为Sleep函数,且包含windows.h
2)关于sleep中的数,在Windows和Linux下1000代表的含义并不相同,Windows下的表示1000毫秒,也就是1秒钟;Linux下表示1000秒,Linux下使用毫秒级别的函数可以使用usleep。
2、clock_t clock(),clock()
获取的是计算机启动后的时间间隔,得到的是CPU时间,精确到1/CLOCKS_PER_SEC秒。
测试程序如下:
#include
#include
int main()
double start,end,cost;
start=clock();
sleep(1);
end=clock();
cost=end-start;
printf("%f/n",cost);
return 0;
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
参考技术B1、获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t timer0 )。 精确到秒。
测试程序如下:
#include <time.h>#include <stdio.h>
int main()
time_t start ,end ;
double cost;
time(&start);
sleep(1);
time(&end);
cost=difftime(end,start);
printf("%f/n",cost);
return 0;
本程序在fedora9测试通过。
关于代码中的sleep函数,需要注意的是:
1)在windows下,为Sleep函数,且包含windows.h
2)关于sleep中的数,在Windows和Linux下1000代表的含义并不相同,Windows下的表示1000毫秒,也就是1秒钟;Linux下表示1000秒,Linux下使用毫秒级别的函数可以使用usleep。
2、clock_t clock(),clock()
获取的是计算机启动后的时间间隔,得到的是CPU时间,精确到1/CLOCKS_PER_SEC秒。
测试程序如下:
#include <time.h>#include <stdio.h>
int main()
double start,end,cost;
start=clock();
sleep(1);
end=clock();
cost=end-start;
printf("%f/n",cost);
return 0;
参考技术C #include <stdio.h>
#include <string.h>
#include <time.h>
time_t scanf_time(char * msg)
struct tm t;
if(!msg) return 0;
memset(&t, 0, sizeof(t));
printf(msg);
printf("year?"); scanf("%04d", &(t.tm_year)); t.tm_year -= 1900;
printf("month?");scanf("%02d", &(t.tm_mon)); t.tm_mon --;
printf("day?"); scanf("%02d", &(t.tm_mday));
printf("hour?"); scanf("%02d", &(t.tm_hour));
printf("minute?");scanf("%02d",&(t.tm_min));
return mktime(&t);
int main(void)
time_t x = 0, y = 0;
x = scanf_time("please input time X:\n");
y = scanf_time("please input time Y:\n");
printf("Y - X = %d seconds.\n", y-x);
printf("Y - X = %d minutes.\n", (y-x)/60);
printf("Y - X = %d hours.\n", (y-x)/3600);
printf("Y - X = %d days.\n", (y-x)/86400L);
return 0;
参考技术D LARGE_INTEGER one;
LARGE_INTEGER two;
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&one);
计算过程
QueryPerformanceCounter(&two);
printf("所用时间:%f",two.QuadPart * 1.0 / freq.QuadPart - one.QuadPart * 1.0 / freq.QuadPart ) ;
以上是关于C++中怎么计算两个时间的时间差????????的主要内容,如果未能解决你的问题,请参考以下文章