什么是命令“date+%s”的窗口等效

我正在写一个批处理脚本,我需要的时间。 在Linux下很容易,但我不知道如何在Windows中做到这一点。

这是一个本地批处理解决方案,可以在任何地区使用。 它使用WMIC以独立于区域的方式获取当前本地时间。 其他一切都是字符串解析和基本数学的“简单”问题。

:UnixTime [ReturnVar] [TimeStamp] :: :: Computes the Unix time from the current local time as reported by the :: operating system. The Unix time is the number of seconds that have elapsed :: since midnight Coordinated Universal Time (UTC), January 1, 1970, not :: counting leap seconds. :: :: The result is returned in variable ReturnVar, :: or the result is echoed if ReturnVar is not specified :: :: If the TimeStamp is provided in the 2nd parameter, then the Unix time for :: the TimeStamp is computed, rather then for the current time. :: :: The TimeStamp must have the same format as used by WMIC: :: :: YYYYMMDDhhmmss.ffffffSzzz :: :: where: :: :: YYYY = gregorian year :: MM = month :: DD = day :: hh = hour in 24 hour format :: mm = minute :: ss = seconds :: ffffff = fractional seconds (microseconds) :: S = timezone sign: + or - :: zzz = timezone: minutes difference from GMT :: :: Each component must be zero prefixed as needed to maintain the proper width. :: :: The ReturnVar parameter must be provided in order to use the TimeStamp. :: A ReturnVar of "" will function the same as no ReturnVar. This enables the :: specification of a TimeStamp without an actual ReturnVar. :: @echo off setlocal set "ts=%~2" if not defined ts for /f "skip=1 delims=" %%A in ('wmic os get localdatetime') do if not defined ts set "ts=%%A" set /a "yy=10000%ts:~0,4% %% 10000, mm=100%ts:~4,2% %% 100, dd=100%ts:~6,2% %% 100" set /a "dd=dd-2472663+1461*(yy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yy+4900+(mm-14)/12)/100)/4" set /a ss=(((1%ts:~8,2%*60)+1%ts:~10,2%)*60)+1%ts:~12,2%-366100-%ts:~21,1%((1%ts:~22,3%*60)-60000) set /a ss+=dd*86400 endlocal & if "%~1" neq "" (set %~1=%ss%) else echo %ss% exit /b 

请注意,此解决方案的寿命有限。 当Unix时间超过一个有符号的32位整数的最大值时,它将在2038-01-19停止工作。

编辑 – 代码已被编辑,以支持命令行上的时间戳字符串转换,而不是当前的本地时间。 确切的时间范围是1901-12-13 20:45:52.000000到2038-01-19 03:14:07.999999 GMT。 在1970-01-01 00:00:00:00之前的时间将产生负值。

如果用“unix time”来表示第二个时代 ,那么Windows就不包含生成它的工具。 相反,您可以安装第三方工具。 例如:

  • 安装Cygwin 。
  • 找到date二进制文件(位于C:\Cygwin\或您安装的位置)
  • 像在Linux中一样使用它。

另外,根据这个答案的真棒评论,你可以安装GNU Coreutils ,它还包括一个date命令。 它包含了一些你可能不需要的其他工具,但是Cygwin也是如此。

你可以在windows中使用vbscript,解释器可以在你的系统上使用。

 '--------------------epoch.vbs----------------------- option explicit dim s,o,z for each o in GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem") z=o.CurrentTimeZone next s=DateDiff("s", "01/01/1970 00:00:00", Now())-(60*z) wscript.echo(s) wscript.quit