我使用这样的代码来获取Windows Bash中的当前时间:
set hour=%TIME:~0,2%
set minute=%TIME:~3,2%
set second=%TIME:~6,2%
但我需要当前时间+13秒。有没有办法解决这个问题?
答案 0 :(得分:2)
假设24小时 hh:mm:ss,cc 格式,
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "tokens=1-3 delims=:., " %%a in ("%time%") do (
set /a "second=100%%c %% 100 +13", ^
"minute=100%%b %% 100 +second/60", ^
"hour=(100%%a %% 100 +minute/60) %% 24 +100", ^
"minute=minute %% 60 +100", ^
"second=second %% 60 +100"
)
echo %time%
echo %hour:~-2%:%minute:~-2%:%second:~-2%
时间字符串被标记化(是的,子字符串操作同样有效,但我认为这是一种更简单的方法),因此在%%a
中检索小时,在%%b
中检索分钟,在%%c
中检索秒{1}}并完成了计算
对于三小时元素,%time%
字符串中检索到的值以100
为前缀,然后执行mod 100
操作,以避免{{1}的问题}和08
值被视为错误的八进制值。一旦检索到正确的十进制值,我们就可以运行
09
我们以100-159秒,100-159分钟,100-123小时范围内的值结束。这样我们就可以正确地输出填充的时间元素,从每个变量中检索最后两位数。
答案 1 :(得分:1)
像其他解决方案一样,但我首先计算当天的秒数,然后添加13 然后将结果数字格式化为hh:mm:ss格式。
rem ** Calculate the seconds of the day
for /f "tokens=1-3 delims=:., " %%a in ("%time: =0%") do (
set /a "secOfDay=1%%c %% 100 + 60*(1%%b %% 100) + 3600*(1%%a %% 100 )"
)
REM ** Add the desired offset
set /a timePlus13sec=secOfDay+13
REM ** Convert the new time to the HH:mm:ss format
set /a sec=100+timePlus13sec %% 60
set /a temp=timePlus13sec / 60
set /a min=100+temp %% 60
set /a hour=100+(temp / 60) %% 24
echo %hour:~-2%:%min:~-2%:%sec:~-2%
答案 2 :(得分:1)
此方法使用JScript辅助代码,因此始终正确:
@echo off
echo d=new Date();d.setTime(d.getTime()+13000);WScript.Echo(d.toString().split(' ')[3]);> test.js
for /F %%a in ('cscript //nologo test.js') do set timeAhead=%%a
echo Time plus 13 seconds: %timeAhead%
答案 3 :(得分:0)
我需要当前时间+13秒。添加13和秒似乎是最简单的任务,但有一些复杂性:
set /A
中以零开头的所有数值都被视为
八进制但08和09不是有效的八进制数字。参看下一个解决方法
%%
模数运算符:set /A "val=100%lav%%%100"
剧本:
@ECHO OFF >NUL
@SETLOCAL
set "myTIME=%TIME%"
call :plus13 "%myTIME%" 6 13 60 second carry
call :plus13 "%myTIME%" 3 %carry% 60 minute carry
call :plus13 "%myTIME%" 0 %carry% 24 hour carry
echo "%myTIME%"
echo "%hour% %minute% %second%"
@ENDLOCAL
@goto :eof
:: plus13 procedure
:: %1 = time value
:: %2 = position in time
:: %3 = value to add
:: %4 = threshold
:: %5 = name of time variable
:: %6 = name of carry variable
:plus13
@SETLOCAL enableextensions enabledelayedexpansion
set "lav=%~1"
set "lav=!lav:~%2,2!"
set /A "val=100%lav%%%100"
set /A "val+=%3"
if %val% GEQ %4 (
set /A "val-=%4"
set /A "car=1"
) else (set /a "car=0")
if %val% LSS 10 set "val=0%val%"
@ENDLOCAL&set %5=%val%&set %6=%car%&goto :eof
输出:
C:\...>time13s
"11:51:49,50"
"11 52 02"