- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
批处理bat计算两个时间差
批处理bat计算两个时间差
这个是脚本代码[保存为etime.bat放在当前路径下即可:
代码如下:
:etime begin_time end_time return
rem 所测试任务的执行时间不超过1天 // 骨瘦如柴版
setlocalamp;set be=%~1:%~2amp;set cc=(%%d-%%a)*360000+(1%%e-1%%b)*6000+1%%f-1%%camp;set dy=-8640000
for /f delims=: tokens=1-6 %%a in (%be:.=%)do endlocalamp;set/a %3=%cc%,%3+=%dy%*(%331)amp;exit/b
计算两个时间点差的函数批处理etime
今天兴趣大法思考了好多bat的问题,以至于通宵
在论坛逛看到有个求时间差的函数被打搅调用地方不少(大都是测试代码执行效率的)
代码如下:
:time0
::计算时间差(封装)
@echo offamp;setlocalamp;set /a n=0amp;rem code 随风 @bbs.bathome.cn
for /f tokens=1-8 delims=.: %%a in (%~1:%~2) do (
set /a n+=10%%a%%100*360000+10%%b%%100*6000+10%%c%%100*100+10%%d%%100
set /a n-=10%%e%%100*360000+10%%f%%100*6000+10%%g%%100*100+10%%h%%100)
set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100
set ok=%s% 小时 %f% 分钟 %m% 秒 %n% 毫秒
endlocalamp;set %~3=%ok:-=%amp;goto :EOF
这个代码的算法是统一找时间点凌晨0:00:00.00然后计算任何一个时间点到凌晨的时间差(单位跑秒)
然后任意两个时间点求时间差就是他们相对凌晨时间点的时间数的差
对09这样的非法8进制数的处理用到了一些技巧,还有两个时间参数不分先后顺序,可全可点,
但是这个代码一行是可以省去的(既然是常被人掉用自然体积越小越好):
代码如下:
echo offamp;setlocalamp;set/a n=0amp;set s=+:%~16000+10%%d%%100*100+10%%e%%100)
set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100
set ok=%s% 小时 %f% 分钟 %m% 秒 %n% 毫秒
endlocalamp;(if %3. equ . (echo %ok:-=%) else set %~3=%ok:-=%)amp;exit/b
再研究下,有更简短的版本
这个代码是我在cn-dos写过的,今天再优化了下更简短
代码的算法深入一层:
用hmsw(各字母代表一个两位数字)表示标准时间
我们记他到凌晨的相对时间数为Tx
Tx=hmsw时间点-0:00:00.00时间点=h*3600*100+m*60*100+100*s+w
hmsw 8位10进制数表示的时间数(单位0.01秒)就是hmsw跑秒
hmsw=w+100*s+10000*m+1000000*h
hmsw-Tx=640000*h+4000*m
所以Tx=hmsw-(640000*h+4000*m)=hmsw-4000*(160*h+m)
那么Tx_2-Tx_1=hmsw_2-hmsw_1-4000*(160*(h_2-h_1)+(m_2-m_1))
对与09这样的非法8进制数我们给他们每个前面加上1就可以保证是十进制数又能保证差值不变
对于非同一天的时间(这种情况较少,除非你在接近0晨时调用)我们把用8640000-去替换负号
再用set/a赋值
就是下面代码用到的算法
Tx_2-Tx_1=hmsw_2-hmsw_1-4000*(160*(1h_2-1h_1)+(1m_2-1m_1))
代码如下:
rem 兼容时间点跨天的情行,时间格式00:00:00.00 或者 0:00:00.00 皆可
:_difftime Begin_Time End_Time [ret] //返回两个时间点的差值(单位0.01秒)
Setlocal enabledelayedexpansionamp;set b=0%1amp;set e=0%2amp;set c=1!e:~-11!-1!b:~-11!amp;set c=!c::
文档评论(0)