找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2624|回复: 0

【C】“HH:MM:SS”格式的时间的计算

[复制链接]

1112

主题

1653

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
245
威望
744 点
宅币
24254 个
贡献
46222 次
宅之契约
0 份
在线时间
2298 小时
注册时间
2014-1-26
发表于 2014-7-7 13:33:22 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
这个和那个VB的差不多。这是个控制台程序,用法如下。
D:\C_Proj\TimeCalc\Release>TimeCalc
USAGE:
TimeCalc <HH:MM:SS> <operator> <HH:MM:SS>
Operator can be + - * / % & | ^ << >>
BIN下载: TimeCalc.exe (44 KB, 下载次数: 0, 售价: 1 个宅币)
SRC下载: TimeCalc.7z (18.04 KB, 下载次数: 0, 售价: 10 个宅币)
代码在此。VC6编译通过。
  1. //=============================================================================
  2. //TimeCalc:
  3. //进行HH:MM:SS格式的时间的加减乘除等运算。
  4. //作者:0xAA55
  5. //论坛:[url]http://www.0xaa55.com/[/url]
  6. //版权所有(C) 2013-2014 技术宅的结界
  7. //请保留原作者信息,否则视为侵权
  8. //-----------------------------------------------------------------------------
  9. #include<stdio.h>
  10. #include<time.h>

  11. #define TC_SecondsPerMinute     60
  12. #define TC_MinutesPerHour       60
  13. #define TC_HoursPerDay          24
  14. #define TC_SecondsPerHour       (TC_SecondsPerMinute*TC_MinutesPerHour)
  15. #define TC_SecondsPerDay        (TC_SecondsPerMinute*TC_MinutesPerHour*TC_HoursPerDay)

  16. //=============================================================================
  17. //TimeToSeconds:
  18. //将H:M:S表示时间转换为秒
  19. //-----------------------------------------------------------------------------
  20. #define TimeToSeconds(h,m,s)    s+m*TC_SecondsPerMinute+h*TC_SecondsPerHour

  21. //=============================================================================
  22. //SecondsToTime:
  23. //将秒转换为H:M:S表示时间
  24. //-----------------------------------------------------------------------------
  25. void    SecondsToTime(time_t Time,unsigned*puHours,unsigned*puMinutes,unsigned*puSeconds)
  26. {
  27.     *puHours=  (Time / TC_SecondsPerHour),
  28.     *puMinutes=(Time / TC_SecondsPerMinute) % TC_MinutesPerHour,
  29.     *puSeconds=(Time % TC_SecondsPerMinute);
  30. }

  31. //=============================================================================
  32. //ParseTimeString:
  33. //从H:M:S格式的字符串提取H、M、S的值
  34. //返回解析的数值个数
  35. //-----------------------------------------------------------------------------
  36. #define ParseTimeString(str,ph,pm,ps) \
  37.     sscanf(str,"%u:%u:%u",ph,pm,ps)

  38. void Usage()
  39. {
  40.     fputs(
  41.         "USAGE:\n"
  42.         "TimeCalc <HH:MM:SS> <operator> <HH:MM:SS>\n"
  43.         "Operator can be + - * / % & | ^ << >>\n",stderr);
  44. }

  45. int main(int argc,char**argv)
  46. {
  47.     time_t
  48.         tTime1,
  49.         tTime2,
  50.         tTimeResult;

  51.     unsigned
  52.         uHours1,
  53.         uMinutes1,
  54.         uSeconds1;

  55.     unsigned
  56.         uHours2,
  57.         uMinutes2,
  58.         uSeconds2;

  59.     unsigned
  60.         uHoursResult,
  61.         uMinutesResult,
  62.         uSecondsResult;

  63.     if(argc<4)
  64.     {
  65.         Usage();
  66.         return 1;
  67.     }

  68.     //分析输入的字符串
  69.     if(ParseTimeString(argv[1],&uHours1,&uMinutes1,&uSeconds1)!=3)
  70.     {
  71.         Usage();
  72.         return 1;
  73.     }
  74.     if(ParseTimeString(argv[3],&uHours2,&uMinutes2,&uSeconds2)!=3)
  75.     {
  76.         Usage();
  77.         return 1;
  78.     }

  79.     //换算成秒
  80.     tTime1=TimeToSeconds(uHours1,uMinutes1,uSeconds1);
  81.     tTime2=TimeToSeconds(uHours2,uMinutes2,uSeconds2);

  82.     //判断运算符
  83.     if(!strcmp(argv[2],"+"))
  84.     {
  85.         tTimeResult=tTime1+tTime2;
  86.     }else
  87.     if(!strcmp(argv[2],"-"))
  88.     {
  89.         tTimeResult=tTime1-tTime2;
  90.     }else
  91.     if(!strcmp(argv[2],"*"))
  92.     {
  93.         tTimeResult=tTime1*tTime2;
  94.     }else
  95.     if(!strcmp(argv[2],"/"))
  96.     {
  97.         tTimeResult=tTime1/tTime2;
  98.     }else
  99.     if(!strcmp(argv[2],"%"))
  100.     {
  101.         tTimeResult=tTime1%tTime2;
  102.     }else
  103.     if(!strcmp(argv[2],"&"))
  104.     {
  105.         tTimeResult=tTime1&tTime2;
  106.     }else
  107.     if(!strcmp(argv[2],"|"))
  108.     {
  109.         tTimeResult=tTime1|tTime2;
  110.     }else
  111.     if(!strcmp(argv[2],"^"))
  112.     {
  113.         tTimeResult=tTime1^tTime2;
  114.     }else
  115.     if(!strcmp(argv[2],"<<"))
  116.     {
  117.         tTimeResult=tTime1<<tTime2;
  118.     }else
  119.     if(!strcmp(argv[2],">>"))
  120.     {
  121.         tTimeResult=tTime1>>tTime2;
  122.     }

  123.     //转换成H:M:S的格式
  124.     SecondsToTime(tTimeResult,&uHoursResult,&uMinutesResult,&uSecondsResult);

  125.     //打印
  126.     printf("%u:%u:%u\n",uHoursResult,uMinutesResult,uSecondsResult);
  127.    
  128.     //结束
  129.     return 0;
  130. }
复制代码

本帖被以下淘专辑推荐:

回复

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-26 19:47 , Processed in 0.045211 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表