无忧启动论坛

标题: 计算两个时间段相隔多少分种[简单] [打印本页]

作者: bagpipe    时间: 2007-1-4 09:35
标题: 计算两个时间段相隔多少分种[简单]
没有时间考虑代码的臃肿性,随便写了一下,没有仔细测试过,只能输入24小时时间格式
例如:FIRST TIME :  07:30  
           SECOND TIME :23:21
也没有做错误处理,只是学习而用

  1. @echo off&setlocal
  2. set/p a=First Time:
  3. set/p b=Second Time:
  4. if %a% gtr %b% (goto a) else goto b
  5. :a
  6. set aa=%a:~0,2%
  7. if %aa% equ 08 (set aa=%aa:~-1%) else (if %aa% equ 09 set aa=%aa:~-1%)
  8. set bb=%b:~0,2%
  9. if %bb% equ 08 (set bb=%bb:~-1%) else (if %bb% equ 09 set bb=%bb:~-1%)
  10. set cc=%a:~-2%
  11. if %cc% equ 08 (set cc=%cc:~-1%) else (if %cc% equ 09 set cc=%cc:~-1%)
  12. set dd=%b:~-2%
  13. if %dd% equ 08 (set dd=%dd:~-1%) else (if %dd% equ 09 set dd=%dd:~-1%)
  14. set /a aaa=(%aa%-%bb%)*60
  15. if %cc% gtr %dd% (set /a bbb=%cc%-%dd%) else (set /a bbb=%dd%-%cc%&goto d)
  16. set /a aaa=%aaa%+%bbb%&goto c
  17. :d
  18. set /a aaa=%aaa%-%bbb%
  19. :c
  20. echo 相隔时间为 %aaa% 分种
  21. goto :eof

  22. :b
  23. set aa=%a:~0,2%
  24. if %aa% equ 08 (set aa=%aa:~-1%) else (if %aa% equ 09 set aa=%aa:~-1%)
  25. set bb=%b:~0,2%
  26. if %bb% equ 08 (set bb=%bb:~-1%) else (if %bb% equ 09 set bb=%bb:~-1%)
  27. set cc=%a:~-2%
  28. if %cc% equ 08 (set cc=%cc:~-1%) else (if %cc% equ 09 set cc=%cc:~-1%)
  29. set dd=%b:~-2%
  30. if %dd% equ 08 (set dd=%dd:~-1%) else (if %dd% equ 09 set dd=%dd:~-1%)
  31. set /a aaa=(%bb%-%aa%)*60
  32. if %cc% gtr %dd% (set /a bbb=%cc%-%dd%) else (set /a bbb=%dd%-%cc%&goto d)
  33. set /a aaa=%aaa%-%bbb%&goto c
  34. :d
  35. set /a aaa=%aaa%+%bbb%
  36. :c
  37. echo 相隔时间为 %aaa% 分种
复制代码

[ 本帖最后由 bagpipe 于 2007-1-4 09:48 AM 编辑 ]
作者: ccwan    时间: 2007-1-4 15:43
呵呵,赶过来支持一下,抢了沙发了。^_^
作者: namejm    时间: 2007-1-4 16:10
  抽根凳子坐下^_^。顺便发一段以前写的代码凑个热闹:

  1. @echo off
  2. :: 判断一个脚本执行完毕所需要的时间
  3. :: 先取开始时间,然后在即将结束的时候取结束时间
  4. :: 两个时间都分别提取小时、分和秒数
  5. :: 分别对小时数、分钟数和秒数进行操作
  6. :: 还要对08和09这两个数进行操作
  7. :: 注意:set /a num=的格式只能处理两位数中是否高位为0,如果是多位数
  8. ::       要去高位的所有0的话,要用循环测试高位是否为0或者在高位添1然后
  9. ::       再减去1000之类的数字的方法

  10. set time_begin=%time:~0,-3%
  11. echo 脚本开始运行时间是 %time_begin%
  12. :: 小于10的小时数前有空格,要做去空格操作
  13. for /f "tokens=1,2,3 delims=:" %%i in ("%time_begin%") do (
  14.     set /a hour_b=%%i
  15.     set /a munite_b=%%j
  16.     set /a second_b=%%k
  17. )
  18. pause
  19. set time_end=%time:~0,-3%
  20. for /f "tokens=1,2,3 delims=:" %%i in ("%time_end%") do (
  21.     set /a hour_e=%%i
  22.     set /a munite_e=%%j
  23.     set /a second_e=%%k
  24. )
  25. call :time_lapse
  26. echo 脚本结束运行的时间是 %time_end%
  27. echo 共花费了 %hour_% 小时 %munite_% 分 %second_% 秒
  28. pause>nul
  29. goto :eof

  30. :time_lapse
  31. :: 一定要按照 秒=>分钟=>小时 的顺序操作
  32. if %second_e% lss %second_b% (
  33.     set /a munite_e=%munite_e%-1
  34.     set /a second_e=%second_e%+60
  35. )
  36. set /a second_=%second_e%-%second_b%

  37. if %munite_e% lss %munite_b% (
  38.     set /a hour_e=%hour_e%-1
  39.     set /a munite_e=%munite_e%+60
  40. )
  41. set /a munite_=%munite_e%-%munite_b%

  42. if %hour_e% lss %hour_b% (
  43.     set /a hour_e=%hour_e%+24
  44. )
  45. set /a hour_=%hour_e%-%hour_b%
  46. goto :eof
复制代码

作者: lxl1638    时间: 2007-1-4 17:17
有意思,学习学习。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3