年月日格式日期转换求取时间差[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; }