年月日格式日期转换求取时间差[C]

  今天二姐问了一个问题,是给定两个时间,要求求出两个时间经历的时间差(秒)。给定时间的时间是int类型的年、月、日、时、分、秒。

  开始她说这个太复杂,给了两个时间,要算的话还得自己计算哪年是闰年,闰月之类的,我一听也糊涂了。

  本着有问题,"一百度二谷歌、三看技术文档"的原则,我查了一下,发现这个问题其实非常好解决,因为C专门有Standard C Time&Date的库,可以将你给定的时间转换成秒为单位的数据。测试程序:

#include <iostream.h>
#include<time.h>
//将年月日时间转换为结构体,返回距离1970年1月1日0:0:0的秒数
time_t timeconvert(int year,int mon,int day,int hour,int min,int sec,struct tm &time1)
{
	time_t second; 
	time1.tm_sec=sec;/* Seconds: 0-59 (K&R says 0-61?) */
	time1.tm_min=min;/* Minutes: 0-59 */
	time1.tm_hour=hour;/* Hours since midnight: 0-23 */
	time1.tm_mday=day;/* Day of the month: 1-31 */
	time1.tm_mon=mon-1;/* Months *since* january: 0-11 */
	time1.tm_year=year-1900;/* Years since 1900 */
	//改动周几不影响返回的时间值,可以通过改动日期的日数来达到修改时间  
	time1.tm_wday=1;
	return second=mktime(&time1); 	
}
// char *asctime( const struct tm *ptr );	
//函数将ptr所指向的时间结构转换成下列字符串
//day month date hours:minutes:seconds year\n\0
int main(int argc, char *argv[])
{
	struct tm time1,time2;
	time_t sec1,sec2;
	double deta_sec;
	sec1=timeconvert(2000,11,5,20,13,50,time1);
	sec2=timeconvert(2000,11,5,20,12,30,time2);
	deta_sec=difftime(sec1,sec2);//sec1-sec2 
	cout<<"time1:"<<asctime(&time1)<<endl;
	cout<<"time2:"<<asctime(&time2)<<endl;
	cout<<"time1 second:"<<sec1<<endl;
	cout<<"time2 second:"<<sec2<<endl;	
	cout<<"time1-time2:"<<deta_sec<<endl;
	cout<<"current second:"<<time(0)<<endl;
	return 0;
}

  

posted @ 2011-11-05 16:29  ijustwanttorun  阅读(863)  评论(0编辑  收藏  举报