bat 语句 怎么计算两个时间差

编写一个批处理文件[bat]
功能是:
1.运行

2.按任意键,显示当时时间[假设为:Time1]

等待若干秒……

3.再按任意键,显示此时时间[假设为:Time2]

并显示两个时间的差,即:由Time1到Time2之间花了多少时间

bat语句中计算两个时间差,可以先将时间转换成秒数,然后,将两个时间数进行相减即可。

参考代码:

@echo off
set ns=0
rem 显示开始时间
set time1=%time%
echo 当前时间是%time1%
call :time2sec %time1%
set t1=%ns%
pause
rem 显示结束时间
set time2=%time%
echo 当前时间是%time2%
call :time2sec %time2%
set t2=%ns%
rem 计算时间差
set /a tdiff=%t2% - %t1%
echo diff %time1% from %time2% = %tdiff% seconds.

pause
goto :eof

:time2sec
rem 将时间转换成秒数,保存到ns中
set tt=%1
set hh=%tt:~0,2%
set mm=%tt:~3,2%
set ss=%tt:~6,2%
set /a ns=(%hh%*60+%mm%)*60+%ss%
goto :eof

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-26
@echo off
title 同一月份下的耗时计算
 
::获取起始月份、起始日期、起始小时和起始分钟
set startmonth=%date:~5,2%
set startday=%date:~8,2%
set starthour=%time:~0,2%
set startmin=%time:~3,2%
 
echo.&echo 修改系统日期和时间为未来同一个月份下的某日某月某时某分 以便测试脚本
echo 完成修改后 按任意键继续
pause >nul
 
::获取终止月份、终止日期、终止小时和终止分钟
set endmonth=%date:~5,2%
set endday=%date:~8,2%
set endhour=%time:~0,2%
set endmin=%time:~3,2%
 
::初始化间隔日期变量、间隔小时变量和间隔分钟变量
set intday=0
set inthour=0
set intmin=0
 
::初始化耗时变量
set inttime=0
 
::如果结束月份和起始月份不在同一月 则调用calc4标签
if %endmonth% NEQ %startmonth% (call:calc4 & goto :finalresult)
 
::如果结束日期等于起始日期 则调用calc1标签
if %endday% EQU %startday% (call:calc1 & goto :finalresult)
 
::如果结束日期大于起始日期 则调用calc2标签
if %endday% GTR %startday% (call:calc2 & goto :finalresult)
 
::如果结束日期小于起始日期 则调用calc3标签
if %endday% LSS %startday% (call:calc3 & goto :finalresult)
 
::备注:没有规避同一天内结束小时小于起始小时、以及同一小时内结束分钟小于起始分钟的情况,因为在脚本运行过程中,逻辑上一般不会出现这两种情况。
 
::显示耗时
:finalresult
echo 耗时:%inttime%
exit /b
 
::同一天内的耗时计算 需考虑到结束分钟小于起始分钟的时候 从终止小时借位的情况
:calc1
if /i %endmin% LSS %startmin% (set /a intmin=endmin+60-startmin & set /a endhour-=1) else (set /a intmin=endmin-startmin)
set /a inthour=endhour-starthour
set /a intday=endday-startday
set inttime=%intday%天%inthour%小时%intmin%分钟
goto :eof
 
::同一月份但不同天内的耗时计算 需考虑到结束分钟小于起始分钟的时候 从终止小时借位的情况 需考虑到结束小时小于起始小时的时候 从终止日期借位的情况
:calc2
if /i %endmin% LSS %startmin% (set /a intmin=endmin+60-startmin & set /a endhour-=1) else (set /a intmin=endmin-startmin)
if /i %endhour% LSS %starthour% (set /a inthour=endhour+24-starthour & set /a endday-=1) else (set /a inthour=endhour-starthour)
set /a intday=endday-startday
set inttime=%intday%天%inthour%小时%intmin%分钟
goto :eof
 
::同一月份下 结束日期逻辑上不能小于起始日期 抛出错误
:calc3
set inttime=错误!结束日期小于起始日期!
goto :eof
 
::跨月份的情况忽略不计
:calc4
set inttime=跨月份忽略耗时计算
goto :eof

第2个回答  推荐于2018-03-04
@echo off
echo 现在时间是%time:~0,2%点%time:~3,2%分%time:~6,2%秒
set time1=%time:~0,2%%time:~3,2%%time:~6,2%
pause
echo 现在时间是%time:~0,2%点%time:~3,2%分%time:~6,2%秒
set time2=%time:~0,2%%time:~3,2%%time:~6,2%

set /a time3=%time2%-%time1%
echo 间隔%time3%秒
pause本回答被提问者和网友采纳
相似回答