2012-07-08 132 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