我用這樣的代碼在Windows擊獲取當前時間:回聲設置特定時間
set hour=%TIME:~0,2%
set minute=%TIME:~3,2%
set second=%TIME:~6,2%
但我需要一個當前時間13秒。有什麼方法可以得到這個嗎?
我用這樣的代碼在Windows擊獲取當前時間:回聲設置特定時間
set hour=%TIME:~0,2%
set minute=%TIME:~3,2%
set second=%TIME:~6,2%
但我需要一個當前時間13秒。有什麼方法可以得到這個嗎?
Assumming一個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
和Calcs(計算)完成
對於這三個小時的元素,從%time%
字符串所檢索的值的前綴爲100
,然後mod 100
操作,則一個將避免08
和09
值被認爲是錯誤的八進制值的問題。一旦正確的十進制值被檢索,我們可以操作
second = currentSeconds + 13
minute = currentMinutes + 1 (if second > 60)
hour = currentHour + 1 (if minute > 60) adjusted to 24h + 100 (for padding)
minute = minute adjusted to 0-59 range + 100 (for padding)
second = second adjusted to 0-59 range + 100 (for padding)
我們在第二端,值的範圍在100-159,100-159在分,100-123在小時。這樣我們可以正確輸出填充時間元素,從每個變量中檢索最後兩位數字。
如果13秒跨越從標準時間到夏令時的轉換(反之亦然),該怎麼辦? - 邪惡的笑容:-) – dbenham 2014-12-19 14:36:33
@dbenham,;)它可以[更糟](http://stackoverflow.com/a/6841479/2861476)。但無論如何,時間加上13秒的操作不受夏令時,星際秒數或UTC協調的影響。這是一個純粹的時間操作,沒有日期,所以沒有任何指出的考慮因素適用。 **但是**當然這是*「可能」*在使用此計算的代碼的其餘部分需要考慮的事項。謝謝。 – 2014-12-19 14:52:33
我需要當前時間+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"
類似於其他解決方案,但我首先計算一天中的秒數,然後加上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%
這種方法使用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%
創建EXE文件,並得到輸出。 – i486 2014-12-19 09:21:52