如何使用批处理计算两个时间点的时间差?

我想计算例如[00:02:15]与[00:05:08]之间的时间差。
在网上搜索了很久,找到了不少内容。但太多数有点复杂,我刚接触批处理,看不太懂。
比如这个(http://bbs.bathome.net/thread-4701-1-1.html):
:: etime -- 求%1--%2 的时间差,时间跨度在24小时内可调用之;
:etime <beginTimeVar> <endTimeVar> <retVar> // code by plp626
if "!OS!" neq "%OS%" (echo %0 需要再开启变量延迟后调用&goto:eof)
Set/a "%3=(!%2:~,2!-!%1:~,2!)*360000+(1!%2:~3,2!-1!%1:~3,2!)*6000+1!%2:~-5,2!!%2:~-2!-1!%1:~-5,2!!%1:~-2!,%3+=-8640000*(%3>>31)"&goto:eof

我自己尝试了一下call :etime 00:02:15 00:05:08
提示“运算符不存在”

请问该如何写才正确呢?得到的结果我希望是hh:mm:ss的格式(毫秒不计算也没关系)
谢谢大家

获取里面MyEvent这个事件的反馈值Imports System
Imports System.Reflection
Imports System.Security
Imports Microsoft.VisualBasic

' Compile this sample using the following command line:
' vbc type_getevent.vb /r:"System.Windows.Forms.dll" /r:"System.dll"

Class MyEventExample
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(System.Windows.Forms.Button)
            Dim myEvent As EventInfo = myType.GetEvent("Click")
            If Not (myEvent Is Nothing) Then
                Console.WriteLine(ControlChars.Cr + "Looking for the Click event in the Button class.")
                Console.WriteLine(ControlChars.Cr + myEvent.ToString())
            Else
                Console.WriteLine("The Click event is not available with the Button class.")
            End If
        Catch e As SecurityException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As ArgumentNullException
            Console.WriteLine("An exception occurred.")
            Console.WriteLine("Message :" + e.Message)
        Catch e As Exception
            Console.WriteLine("The following exception was raised : {0}", e.Message)
        End Try
    End Sub 'Main
End Class 'MyEventExample

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-22
好个骨瘦如柴版! 可要在此基础上要再转为时分秒可就胖了追问

求增肥!

追答@echo off
call :ctime 6:25:40.41 6:25:44.73 t
goto :next
:ctime <begin_time> <end_time> <return> 
rem 无论传入是否带毫秒将忽略它
rem 返回时间为24h以内尾数(即相差是整天数),为hh:mm:ss格式 
setlocal
for /f "tokens=1-6 delims=:" %%a in ("%1:%2")do (
  set/a "sh=100+%%d-%%a,sm=2%%e-1%%b,ss=2%%~nf-1%%~nc")
if %ss% lss 100 set/a ss+=60,sm-=1
if %sm% lss 100 set/a sm+=60,sh-=1
if %sh% lss 100 set/a sh+=24
endlocal&set %3=%sh:~-2%:%sm:~-2%:%ss:~-2%
goto :eof
:next
echo  %t%
pause

本回答被提问者采纳
第2个回答  2013-09-22
Call :etime 6:25:40.41 6:25:44.73 return
Echo %return%
Pause
:etime <begin_time> <end_time> <return> 
rem 所测试任务的执行时间不超过1天 // 骨瘦如柴版  
setlocal&set be=%~1:%~2&set cc=(%%d-%%a)*360000+(1%%e-1%%b)*6000+1%%f-1%%c&set dy=-8640000 
for /f "delims=: tokens=1-6" %%a in ("%be:.=%")do endlocal&set/a %3=%cc%,%3+=%dy%*("%3>>31")&exit/b

用的是14楼的代码.

追问

你好,十分感谢回答。
我复制这段代码运行一下后,发现得到的结果是“432”,而不是“00:00:04.32”
不知道能否再改进一下呢?

如何使用批处理计算两个时间点的时间差?
获取里面MyEvent这个事件的反馈值Imports SystemImports System.ReflectionImports System.SecurityImports Microsoft.VisualBasic' Compile this sample using the following command line:' vbc type_getevent.vb \/r:"System.Windows.Forms.dll" \/r:"System.dll"Class MyEventExample Public Shared Sub Mai...

批处理bat计算两个时间差
:EOF 这个代码的算法是统一找时间点凌晨0:00:00.00然后计算任何一个时间点到凌晨的时间差(单位跑秒)然后任意两个时间点求时间差就是他们相对凌晨时间点的时间数的差 对09这样的非法8进制数的处理用到了一些技巧,还有两个时间参数不分先后顺序,可全可点,但是这个代码一行是可以省去的(既然是常被...

如何通过批处理判断2个文件的更新时间差来执行另外一个批处理?
在这个PowerShell脚本中,Get-Item命令用于获取文件的时间戳,然后检查两个时间戳之间的差异。如果差异超过2分钟,脚本会提示重启并使用Start-Process命令以管理员权限运行reboot.bat文件。请根据你的具体需求和环境调整这些示例代码。确保你有足够的权限来运行这些脚本,并且在实际使用前测试它们以确保它们按预...

批处理中如何计算时间差?
echo offtitle 同一月份下的耗时计算 ::获取起始月份、起始日期、起始小时和起始分钟set startmonth=%date:~5,2%set startday=%date:~8,2%set starthour=%time:~0,2%set startmin=%time:~3,2% echo.&echo 修改系统日期和时间为未来同一个月份下的某日某月某时某分 以便测试脚本echo 完成修改后...

批处理中如何计算时间差??
echo offset "t1=24:20:35"set "t2=23:20:20"call :time_to_sec %t1% t1call :time_to_sec %t2% t2set\/a t3=%t1%-%t2%echo;%t3% pause&exit :time_to_sec (输入时间,返回秒)setlocal&for \/f "tokens=1-3 delims=:" %%a in ("%1") do set\/a t=(%%a*60+%%b)*60+...

批处理判断2文件相差多少时间,相差大于1小时则退出2文件相差多少时间...
rem 计算两个指定文件修改时间相差的秒数 set #=Any question&set @=WX&set $=Q&set\/az=0x53b7e0b4 title %#% +%$%%$%\/%@% %z set "file1=D:\\xxx\\文件1"set "file2=D:\\xxx\\文件2"if not exist "%file1%" (echo;"%file1%" not found&pause&exit)if not exist "%file2%"...

怎么样用批处理计算时间差
这个方法只能精确到秒 echo off echo wscript.echo DateDiff("s", "01\/01\/1970 00:00:00", Now())>sjc.vbs for \/f %%i in ('cscript sjc.vbs \/nologo') do set x=%%i copy dianying.wmv d:\\back for \/f %%i in ('cscript sjc.vbs \/nologo') do set y=%%i set \/a z=y-x ...

通过批处理判断文件夹内修改时间和系统时间差来在执行重启就正常了?
rem 判断时间差是否超过阈值 if !diffMinutes! geq %thresholdMinutes% (echo Restarting...call "%batFile%") else (echo No restart needed.)) else (echo Failed to get file timestamp.)exit \/b )这个脚本首先获取指定文件夹中最新修改的文件的时间戳,然后获取系统当前时间戳,计算两者之间的...

求cmd高级运行,会的请进!!!
在批处理中实现等待/延迟/暂停 (以下所有的程序均以等待/延迟/暂停2秒示例)1、比较传统的设计思路,利用for解析变量%time%并存为一个时间点,再利用set计算两个时间点的时间差,最后用if判断时间差是否达到设定的暂停时间。时间精度为0.01秒,适用平台为WinNT\/2K\/XP\/2003。echo off setlocal ...

批处理+vbs 处理时间差的问题
这是因为第一次得到的数值是0,而且在( )之中存在变量,如果使用双%括起来,可能会被直接忽略结果,所以建议使用双!括起来,毕竟你都已经开启环境变量延迟了,那就更需要使用双!了,你把%diff%改成!diff!就正常显示了。

相似回答