2012-07-08 297 views
11

就我所知,批處理沒有提供UNIX時間的命令。我能找到的最接近的是%time%,它只顯示時間戳。批處理:時間戳到UNIX時間

在批處理中是否有命令或一組命令可用於獲取UNIX時間?

+0

的[什麼是Windows等價的命令可能重複 「日期+%S」(http://stackoverflow.com/questions/11124572/什麼是Windows的等效的命令日期) – dbenham 2012-07-08 19:53:05

+0

@dbenham事實上,一個重複的,我忽略了你的解決方案。 – 2012-07-08 21:42:36

+0

下載一個GNU date.exe(來自GnuWin32,MinGW,Cygwin)文件將是有益的。 – 2012-07-09 06:26:09

回答

18

Richie Lawrence's batch library有所有這些漂亮的方便腳本。你需要的是DateToSec(它使用GetDateGetTime)。

這裏有一個簡單的腳本,它採用一點點WMI

@echo off 
setlocal 
call :GetUnixTime UNIX_TIME 
echo %UNIX_TIME% seconds have elapsed since 1970-01-01 00:00:00 
goto :EOF 

:GetUnixTime 
setlocal enableextensions 
for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr "="') do (
    set %%x) 
set /a z=(14-100%Month%%%100)/12, y=10000%Year%%%10000-z 
set /a ut=y*365+y/4-y/100+y/400+(153*(100%Month%%%100+12*z-3)+2)/5+Day-719469 
set /a ut=ut*86400+100%Hour%%%100*3600+100%Minute%%%100*60+100%Second%%%100 
endlocal & set "%1=%ut%" & goto :EOF 

結果將返回到傳遞給GetUnixTime的第一個參數,即%UNIX_TIME%
例如:

1341791426 seconds have elapsed since 1970-01-01 00:00:00 

希望它能幫助!

+3

這是一個很好的答案,但我似乎在代碼中發現了一個錯誤。在今年的前兩個月,結果是未來兩年。如果你有'4800 + z',我認爲你需要'4800-z'。請參閱Richie Lawrence的原始DateToSecs代碼。如果您有時間,請驗證我的修復(並修改您的帖子)。 – jimhark 2013-01-17 21:36:04

+0

@jimhark你是對的。感謝您的更正! – 2013-01-19 11:27:22

+3

好。謝謝。我在副本中做了另一次更改。這不是一個真正的bug,但我想我會分享給你。我將這些代碼分開以嘗試完全理解它。如果將'-2472633'更改爲'-719469',我想你不需要添加4800。它只是退出了這裏不需要的調整。所以,你用兩條以'10000%Year %%% 10000-z'和'Day-719469'結尾的行結束。沒有什麼大的差別,但現在更容易解釋719469是什麼,這是1970年代用來適應時代的天數。 – jimhark 2013-01-19 12:54:41

0

沒有用於返回UNIX時間的批處理命令。您唯一的選擇是編寫一個可以從批處理文件運行的程序,該程序將返回UNIX時間,或者您可以使用Windows PowerShell。

+0

令人驚訝的是,有一種批處理的方式...看到我的回答。 – 2012-07-08 19:18:23

+0

我很抱歉>。< – ctor 2012-07-08 19:28:09

+1

for powershell equivalent command會得到'get-date -uformat%s'(或'powershell -command get-date -uformat%s'來從cmd /批量調用它 – wmz 2012-07-08 19:28:43

0

到目前爲止最好的解決方案是下載獨立的date.exe unix端口。

建議您將其重命名爲unixdate.exe,以避免與MS Date命令衝突。

here

  1. 下載&解壓得到它。據我所知,所有的工具都是「便攜式」的,也就是說,他們不需要任何安裝程序來工作。我只用了幾個(rm.exe & date.exe)。 此外,您可以重命名exe文件的情況下,他們可能會utils的你匹配其他系統已經
  2. 發現在子文件夾中實際可執行的端口(USR \本地\ wbin)
  3. 獲取幫助的信息鍵入命令,隨後用--help(必須拼寫以小寫幫助)

例子:

((PROMPT)):unixdate +%Y%M%d 
20141704 

((PROMPT)):unixdate +%Y%b%d 
2014Sep04 
+0

'20141704'? '17'? Octember ??? – Stephan 2014-09-04 19:22:45

2

什麼簡單的1線長的C程序返回的UNIX時間戳?您可以在批處理腳本中從%errorlevel%中檢索值。

#include <stdio.h> 
#include <time.h> 

int main(void) 
{ 
    return (int) time(NULL); 
} 

在我的命令測試提示它的工作:

C:\Users\dabaran\Desktop\cs50\src\C>.\time || echo %errorlevel% && set mytstamp=%errorlevel% 
1419609373 

C:\Users\dabaran\Desktop\cs50\src\C>echo %mytstamp% 
1419609373 
5

創建一個名爲「getUtime .bat文件。蝙蝠」

@echo off 
echo WScript.Echo(new Date().getTime()); > %temp%\time.js 
cscript //nologo %temp%\time.js 
del %temp%\time.js 

,並呼籲像這樣

"C:\>getUTime" 
1430894237616