【急求】c语言 求两个时间的差值
(第2个时刻的时大于第1个时刻的)有空格。
输入:
12 : 30 : 5 说明:表示第1个时刻12:30:05
14 : 40 : 1
输出:
2:9:56 说明: 表示时间差为2小时9分56秒 展开
/*可以处理空格!!!*/
#include<stdio.h>
#include<string.h>
struct TTime
{
int h,m,s;
long GetSec(){return 3600L*h+60*m+s;}
void StrToTime(char _str[])
{
int i,j,len=strlen(_str);
/*去空格*/
for(i=0;i<len;++i)
if(_str[i]==' ')
{
for(j=i;j<len-1;++j)
_str[j]=_str[j+1];
--len;
i=-1;
continue;
}
/*读小时*/
j=0;
for(i=0;i<len;++i)
if(_str[i]==':')
break;
else
j=j*10 + _str[i]-'0';
h = j;
/*读分钟*/
j=0;
for(++i;i<len;++i)
if(_str[i]==':')
break;
else
j=j*10 + _str[i]-'0';
m = j;
/*读秒*/
j=0;
for(++i;i<len;++i)
j=j*10 + _str[i]-'0';
s = j;
}
void ToPlan(long t)
{
int hh,mm,ss;
hh = t/3600;
t%=3600;
mm = t/60;
t%=60;
ss=t;
printf("%2.2d:%2.2d:%2.2d\n",hh,mm,ss);
}
}Ta,Tb,Tc;
void main()
{
char a[105],b[105];
gets(a);
gets(b);
Ta.StrToTime(a);
Tb.StrToTime(b);
printf("sec: %ld, time: ",Tb.GetSec()-Ta.GetSec());
Tc.ToPlan(Tb.GetSec()-Ta.GetSec());
}
//一小时有3600秒
#define H_PER_SEC 3600
//一分钟有60秒
#define M_PER_SEC 60
typedef unsigned int time_type;
/*计算秒数*/
int cal_total_sec(const time_type h, const time_type m, const time_type s);
/*将相差秒数转化为hh:mm:ss格式结果保存在dh,dm,ds中*/
void trans_to_hms(const time_type d_sec, time_type *dh, time_type *dm, time_type *ds);
/*打印结果*/
void print_d_time(const time_type dh, const time_type dm, const time_type ds);
int main(void)
{
time_type h1, m1, s1;//第一个时刻h1:m1:s1
time_type h2, m2, s2;//第二个时刻h2:m2:s2
time_type total_sec1, total_sec2;//第一个时刻的秒数total_sec1,第二个时刻的秒数total_sec2
time_type d_sec;//两个时刻相差的秒数
time_type dh, dm, ds;//相差的时间dh:dm:ds
//读取两个时刻值
printf("输入时刻1[格式:hh : mm : ss]\n");
scanf("%d : %d : %d", &h1, &m1, &s1);
printf("输入时刻2[格式:hh : mm : ss]\n");
scanf("%d : %d : %d", &h2, &m2, &s2);
//计算两个时刻值的总秒数
total_sec1 = cal_total_sec(h1, m1, s1);
total_sec2 = cal_total_sec(h2, m2, s2);
//计算相差秒数
d_sec = total_sec2 - total_sec1;
//将相差秒数转化为dh:dm:ds格式
trans_to_hms(d_sec, &dh, &dm, &ds);
//打印转化结果
print_d_time(dh, dm, ds);
//等等用户输入任意字符
getch();
//结束程序
return 0;
}
/*计算秒数*/
int cal_total_sec(const time_type h, const time_type m, const time_type s)
{
return h * H_PER_SEC + m * M_PER_SEC + s;
}
/*将相差秒数转化为hh:mm:ss格式结果保存在dh,dm,ds中*/
void trans_to_hms(const time_type d_sec, time_type *dh, time_type *dm, time_type *ds)
{
*dh = d_sec / H_PER_SEC;
*dm = (d_sec - *dh * H_PER_SEC) / M_PER_SEC;
*ds = d_sec - *dh * H_PER_SEC - *dm * M_PER_SEC;
}
/*打印结果*/
void print_d_time(const time_type dh, const time_type dm, const time_type ds)
{
printf("--相差时间\n");
printf("%u:%u:%u\n", dh, dm, ds);
}
/*-----------------------------------------
请注意空格个数,必须遵循严格的输入个数
小时 : 分钟 : 秒数
在每个英文格式下的分号前有且仅有一个空格
------------------------------------------*/