有没有办法使用Windows命令获取历元时间?
有没有办法使用Windows命令获取历元时间?如果没有,是否可以修改有没有办法使用Windows命令获取历元时间?,windows,batch-file,cmd,Windows,Batch File,Cmd,有没有办法使用Windows命令获取历元时间?如果没有,是否可以修改日期和时间命令输出 例如,Windows中的date用/etc给出日期。我想得到一个没有特殊字符的输出,例如/:要得到“yyyymmdd”格式的时间,请尝试以下操作: for /F "tokens=2-4 delims=/ " %i in ('date /t') do echo %k%i%j 更多关于: 您也可以这样做: echo %date:~10,4%%date:~4,2%%date:~7,2% 从命令行中尝试以下操作
日期
和时间
命令输出
例如,Windows中的date
用/etc给出日期。我想得到一个没有特殊字符的输出,例如/:要得到“yyyymmdd”格式的时间,请尝试以下操作:
for /F "tokens=2-4 delims=/ " %i in ('date /t') do echo %k%i%j
更多关于:
您也可以这样做:
echo %date:~10,4%%date:~4,2%%date:~7,2%
从命令行中尝试以下操作
for /f "tokens=2,3,4 delims=/ " %f in ('date /t') do @echo %h%g%f
如果在批处理文件中,请记住将%chars加倍
@echo off
setlocal
for /f "tokens=2,3,4 delims=/ " %%f in ('date /t') do set d=%%h%%g%%f
for /f "tokens=1,2 delims=: " %%f in ('time /t') do set t=%%f%%g
echo datetime is : %d%%t: =0%
endlocal
我得到了这个输出:
c:\development>xx.bat
datetime is : 201008111108
[根据Kurt Pfeifle关于时间扩展中的空间的评论编辑]如果不借助外部工具或其他语言(如VBScript),就无法在批处理文件中获取日期 在VBScript中,您可以使用
date
和time
功能访问当前日期和时间FormatDateTime
将为您提供一种与区域性无关的日期/时间格式,然后您可以对其进行解析
通过在脚本中使用WScript.Echo
并从批处理中调用它,可以从VBScript中获得结果:
for /f "delims=" %%x in ('cscript /nologo foo.vbs') do set result=%%x
然后变量
%result%
包含VBScript在其第一行中作为输出的任何内容。通过我自己的在线研究,我无法找到直接通过批处理文件执行此操作的方法。然而,我找到了一个适合我的解决方案:
在toEpoch.vbs中:
WScript.Echo DateDiff("s", "01/01/1970 00:00:00", Now())
然后从我的批处理脚本调用,如下所示:
for /f "delims=" %%x in ('cscript /nologo toEpoch.vbs') do set epoch=%%x
这将%epoch%变量设置为当前unix时间戳,并且我可以根据需要使用它
希望这有帮助。CoreUtils for Windows项目有一个
date
命令,它为您提供了与Linux下相同的选项
下载软件,并将date.exe
重命名为gnudate.exe
,以避免与Dos date
命令冲突。您需要文件libintl-2.dll
和libiconv-2.dll
来运行该命令
对于所有可用选项类型:
gnudate --help
例如gnudate“+%a%e%b%Y%H:%M:%S”
将给出:
Sun 10 apr 2016 21:52:35
命令gnudate+%s
将给出自历元起的秒数:
1460325461
下一个Dos批处理文件显示gnudate的用法。您需要将gnudate+%s
参数中的%
加倍
rem set the variable s to the epoch seconds.
for /f "tokens=1 delims=" %%A in ('gnudate +%%s') do set s=%%A
rem use `%s%` for the time offset parameter of the ffmpeg drawtext filter.
ffmpeg -y -f lavfi -i testsrc=duration=15.3:size=cif:r=10 -vf "drawtext=fontfile=arial.ttf:text=%%{pts\\\:localtime\\\:%s%\\\:%%a %%d %%b %%Y %%H\\\\\\:%%M\\\\\\:%%S}:fontsize=10:x=w-text_w:y=h-lh:box=1" a.mp4
ffplay a.mp4
此批处理文件已在Linux下的虚拟机中使用Windows 8进行了测试
要运行它,您需要安装ffmpeg
您可以从下载静态构建。使用此命令显示历元后的秒数 (Cmd命令)
powershell-command”(新的时间跨度-开始(获取日期“01/01/1970”)-结束(获取日期)).TotalSeconds“
和我获取的日期时间是:2331
;-)@Preet Sangha:如果时间在10:00之前,则您的t
可能包含前导空格。您可以通过set t=%t:=0
(将所有空格替换为0
)…@johannes:date/t在您的系统上返回什么?当然是ISO 8601。这只是为了强调这种方法在一般情况下注定会失败。@Preet Sangha:我不知道编辑别人的答案需要多少“信用”。。。但我肯定没有。罗塞尔:你为什么说“没有可靠的方法在批处理文件中获取日期”?在哪种意义上是date/t
和time/t
或echo.%date%
和echo.%time%
不可靠(它们在批处理文件中可能不容易处理,但它们如何“不可靠”?)Rössel:你的意思是:没有可靠的方法在批处理文件中获取日期,以便它们在不同的地区和时区可靠地工作???@pipitas:的确,这就是我要说的。或者换句话说:您可以获得一个日期/时间,以便让人阅读,但无法可靠地获得结构化格式的日期或时间,以便使用批处理文件进一步处理它。有一些解决方案适用于更广泛的地区,但在某些地区仍然失败。因此我称之为不可靠。如果我想编写一个程序并将其分发给其他人,我当然不希望语言环境影响它的功能。使用纪元时间——你是指自1970年1月1日以来所有秒的当前计数吗?。。。或自1904-01-01或自1601-01-01或各种其他时代以来的100 ns间隔;-)UNIX时代是迄今为止最奇怪的,imho;-)@摩尔猫:如果我的答案对你很有用,你可以投票表决,然后选择它作为你问题的答案。这就是StackOverflow的工作原理。请参阅常见问题解答-。如果您认为其他答案更适合您的问题,您当然可以选择其他答案。您确定您使用的是DOS吗?这不是Windows控制台吗?效果很好。文章很好,谢谢你指点我。我认为这个版本取决于日期显示的区域设置。例如,英国对美国,等等。这个时代怎么样?这不应该是正确的answer@JesseChisholm这是正确的。这取决于语言环境。我使用WMIC的输出,如中所示:或将UTC选项添加到date命令date-u
和您想要的任何格式中。(哎呀,这是一个linux选项。我的错)这不会像Unixdate+%s“
那样返回整数值。但小数点和小数点后的数字可以通过强制转换为int32进行修剪:powershell-command“[int32](新时间跨度-开始(获取日期“01/01/1970”)-End(获取日期)).TotalSeconds“
在powershell/pwsh中,您可以将其缩短为:[int32](新时间跨度“1/1/1970”).TotalSeconds
或从CMD:powershell-command“[int32](新时间跨度“1/1/1970”)。总秒数“