当前位置:DOS资源站资料中心批处理教程 → Timediff函数 显示两个时间点的差值

Timediff函数 显示两个时间点的差值

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-4-28 21:53:32

这个小函数主要是为测试自己所写的代码的执行时间而写,大家可以调用它测试自己的代码是否高效,执行时间是否足够的短,

由于系统环境变量提供的time精确到0.01秒,所有这个函数也最大程度第精确到0.01秒

它可以显示1天内(可以不是当天)任意两个时间点%time%之间的差值。

@echo off||显示两个时间点的差(精确到0.01秒),很实用的代码
:loop
set TA=%time% & echo %time%A

title 按任意键继续&pause>nul

set TB=%time% & echo %time%B

call:Timediff %TA% %TB% 0
title 按任意键继续...&pause>nul
goto:loop

:: /*  Timediff -
:Timediff [%t1%] [%t2%] [par|0]
for %%a in (+%1 +%2 +%3)do if "%%a"=="+" echo 参数缺失!&exit/b
setlocal enabledelayedexpansion
:timediff_1
set P2=%~1&set "P2=!P2::=!"
set/a P2=%P2:.=%-4000*(%P2:~,4%+60*%P2:~,2%)
if not "%3"=="" set P1=!P2!&shift&goto:timediff_1
if !P2! geq !P1! (set/a df=!P2!-!P1!) else set/a df=!P2!-!P1!+8640000
set/a h=df/360000,m=df%%360000/6000,s=df%%6000/100,pt=df%%100
if %pt% leq 9 set pt=0%pt%
endlocal&if %2.==0. (echo\%h%:%m%:%s%.%pt%) else set %2=%h%:%m%:%s%.%pt%&goto:eof
:: - Timediff - */
也可以这样调用:

@echo off ||显示两个时间点的差(精确到0.01秒),很实用的代码
:loop
set TA=%time% & echo %time%A

title 按任意键继续&pause>nul

set TB=%time% & echo %time%B

call:Timediff %TA% %TB% Tab
for /f "tokens=1-3 delims=:" %%a in ("%TAB%")do echo 时间差:%%a小时%%b分钟%%c秒
pause
goto:loop

:: /*  Timediff -
:Timediff [%t1%] [%t2%] [par|0]
for %%a in (+%1 +%2 +%3)do if "%%a"=="+" echo 参数缺失!&exit/b
setlocal enabledelayedexpansion
:timediff_1
set P2=%~1&set "P2=!P2::=!"
set/a P2=%P2:.=%-4000*(%P2:~,4%+60*%P2:~,2%)
if not "%3"=="" set P1=!P2!&shift&goto:timediff_1
if !P2! geq !P1! (set/a df=!P2!-!P1!) else set/a df=!P2!-!P1!+8640000
set/a h=df/360000,m=df%%360000/6000,s=df%%6000/100,pt=df%%100
if %pt% leq 9 set pt=0%pt%
endlocal&if %2.==0. (echo\%h%:%m%:%s%.%pt%) else set %2=%h%:%m%:%s%.%pt%&goto:eof
:: - Timediff - */
(严重推荐)
还可以这样调用:先将这个代码保存为Timediff.bat放到%path%路径下(我一般直接copy到system32目录里)

:: /*  Timediff -
:Timediff [%t1%] [%t2%] [par|0]
for %%a in (+%1 +%2 +%3)do if "%%a"=="+" echo 参数缺失!&exit/b
setlocal enabledelayedexpansion
:timediff_1
set P2=%~1&set "P2=!P2::=!"
set/a P2=%P2:.=%-4000*(%P2:~,4%+60*%P2:~,2%)
if not "%3"=="" set P1=!P2!&shift&goto:timediff_1
if !P2! geq !P1! (set/a df=!P2!-!P1!) else set/a df=!P2!-!P1!+8640000
set/a h=df/360000,m=df%%360000/6000,s=df%%6000/100,pt=df%%100
if %pt% leq 9 set pt=0%pt%
endlocal&if %2.==0. (echo\%h%:%m%:%s%.%pt%) else set %2=%h%:%m%:%s%.%pt%&goto:eof
:: - Timediff - */
然后直接在代码里这样用:

@echo off||显示两个时间点的差(精确到0.01秒),很实用的代码
:loop
set TA=%time%
title 按任意键继续&pause>nul

call timediff %TA% %time% 0
goto:loop