有没有办法使用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命令获取历元时间?如果没有,是否可以修改
日期
时间
命令输出

例如,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选项。我的错)这不会像Unix
date+%s“
那样返回整数值。但小数点和小数点后的数字可以通过强制转换为int32进行修剪:
powershell-command“[int32](新时间跨度-开始(获取日期“01/01/1970”)-End(获取日期)).TotalSeconds“
在powershell/pwsh中,您可以将其缩短为:
[int32](新时间跨度“1/1/1970”).TotalSeconds
或从CMD:
powershell-command“[int32](新时间跨度“1/1/1970”)。总秒数“