中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 如何求两个时间点的差 上一主题 | 下一主题
pjlcc1234
初级用户





积分 22
发帖 10
注册 2007-1-4
状态 离线
『楼 主』:  如何求两个时间点的差

我在一个文本文件中有两个时间
我想对时间进行处理求出用了多少时间差
怎么样用批处理实现


──────────────── 版务记录 ────────────────
执行:namejm
原标题:时间问题
修改后标题:如何求两个时间点的差
说明:因原标题过于模糊,不便于论坛的搜索和管理,在本提示发表三日之后,
  楼主尚未更改标题,现由本人强制修改标题,并扣除楼主2点积分。
──────────────── 版务记录 ────────────────


[ Last edited by namejm on 2007-1-9 at 09:25 PM ]

   此帖被 -2 点积分    点击查看详情   
评分人:【 namejm 分数: -2  时间:2007-1-10 10:26


2007-1-4 11:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 2 楼』:  

你的那两个时间的格式是怎样的?

2007-1-5 01:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 3 楼』:  

我写了一个,请看看,并改正:



@echo off
echo It is going on....
for /l %%i in (1,1,2) do (
set si[%%i]=%time%
ping -n 4 127.1 >nul
)
pause

for /l %%a in (1,1,2) do (
   set  th[%%a]=%si[%%a]:~0,2%         
rem select hour
   set  tm[%%a]=%si[%%a]:~3,2%         
rem select minute
   set  ts[%%a]=%si[%%a]:~6,2%           
rem select second
   set  tms[%%a]=%si[%%a]:~9,2%      
rem select milisecond
   
)
echo %si[1]%
echo %th[2]%      
pause

    set /a d_tms=tms[2]-tms[1]                     
rem calculate det of tms
    set /a d_ts=ts[2]-ts[1]                                
rem calculate det of tms
    set /a d_tm=tm[2]-tm[1]                          
rem calculate det of tms
    set /a d_th=th[2]-th[1]                              
rem calculate det of tms

if  %d_tms% lss 0 ( set /a d_tms+=100 & set d_ts-=1)
if  %d_ts% lss 0 ( set /a d_ts+=60 & set d_tm-=1)
if  %d_tm% lss 0 ( set /a d_tms+=60 & set d_th-=1)

echo The time taked is:
echo.
echo %d_th%:%d_tm%:%d_ts%.%d_tms%
pause>nul



该程序还是有问题,我在cmd下直接使用
set  th[%%a]=%si[%%a]:~0,2%  等等

set /a d_tms=tms[2]-tms[1]  等等

的时候,没有任何错误,但是一写到bat中,就出现问题了
它们不能被正确的赋值

请高手指正
谢谢

2007-1-5 01:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 4 楼』:  

有人解释一下吗?
急啊?

谢谢!

2007-1-7 02:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

  帖一段以前写的代码:
@echo off
:: 判断一个脚本执行完毕所需要的时间
:: 先取开始时间,然后在即将结束的时候取结束时间
:: 两个时间都分别提取小时、分和秒数
:: 分别对小时数、分钟数和秒数进行操作
:: 还要对08和09这两个数进行操作
:: 注意:set /a num=的格式只能处理两位数中是否高位为0,如果是多位数
::       要去高位的所有0的话,要用循环测试高位是否为0或者在高位添1然后
::       再减去1000之类的数字的方法
:: 感谢pengfei测试
set time_begin=%time:~0,-3%
echo 脚本开始运行时间是 %time_begin%
:: 小于10的小时数前有空格,要做去空格操作
for /f "tokens=1,2,3 delims=:" %%i in ("%time_begin%") do (
    set /a hour_b=%%i
    set /a munite_b=%%j
    set /a second_b=%%k
)
pause
set time_end=%time:~0,-3%
for /f "tokens=1,2,3 delims=:" %%i in ("%time_end%") do (
    set /a hour_e=%%i
    set /a munite_e=%%j
    set /a second_e=%%k
)
call :time_lapse
echo 脚本结束运行的时间是 %time_end%
echo 共花费了 %hour_% 小时 %munite_% 分 %second_% 秒
pause>nul
goto :eof

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

if %munite_e% lss %munite_b% (
    set /a hour_e=%hour_e%-1
    set /a munite_e=%munite_e%+60
)
set /a munite_=%munite_e%-%munite_b%

if %hour_e% lss %hour_b% (
    set /a hour_e=%hour_e%+24
)
set /a hour_=%hour_e%-%hour_b%
goto :eof
  另帖一段 pengfei 发给我的代码:
@echo off
::11:08:25.45
:: 运行程序的时间统计
set _time_start=%time%
set /a hour_start=%_time_start:~0,2%
set /a minute_start=1%_time_start:~3,2%-100
set /a second_start=1%_time_start:~6,2%-100
echo %time%
echo %hour_start%
echo %minute_start%
echo %second_start%
pause
:: 结束程序的时间统计
set _time_end=%time%
set /a hour_end=%_time_end:~0,2%
set /a minute_end=1%_time_end:~3,2%-100
set /a second_end=1%_time_end:~6,2%-100
echo %time%
echo %hour_end%
echo %minute_end%
echo %second_end%
pause

:: 计算秒数
if %second_end% lss %second_start% (
    set /a second_end=%second_end%+60
    set /a minute_end=%minute_end%-1
)
set /a second=%second_end%-%second_start%

:: 计算分钟数
if %minute_end% lss %minute_start% (
    set /a minute_end=%minute_end%+60
    set /a hour_end=%hour_end%-1
)
set /a minute=%minute_end%-%minute_start%

:: 计算小时数
if %hour_end% lss %hour_start% (
    set /a hour_end=%hour_end%+24
)
set /a hour=%hour_end%-%hour_start%

echo %hour%:%minute%:%second%
pause




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-1-7 02:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  

先贴段文件再说了

2007-1-7 02:53
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 7 楼』:  

哦,谢谢了

有没有更简单的代码?

呵呵
不要说我不知足啊?!

不满足才有进步!呵呵......

2007-1-7 02:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 8 楼』:  

这是我刚学会批处理写的,计算精确到了跑秒。
     

  Quote:
“计算两个时间点的差,测试命令执行时间”


http://www.cn-dos.net/forum/view ... B%E6%97%B6%E9%97%B4

2008-1-8 23:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: