如何使用windows批处理文件获取UTC时间



我一直在尝试找到一种方法,让windows批处理文件在运行时显示当前UTC时间。换句话说,得到自1970年启动以来的当前毫秒数。

有人知道怎么做吗。

使用WMI:

for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr "="') do set %%x

这将设置您可以使用的变量DayDayofWeekHourMinuteMonthQuarterSecondWeekInMonthYear

不过,你不会轻易从Windows中使用Unix epoch。如果你有PowerShell,你可以使用

[long]((date).touniversaltime()-[datetime]'1970-01-01').totalmilliseconds

您可以通过从批处理文件调用

powershell "..."

但在这种情况下,您无论如何都可以用真实的语言编写批处理文件。

备选方案:

REM get UTC times:
for /f %%a in ('wmic Path Win32_UTCTime get Year^,Month^,Day^,Hour^,Minute^,Second /Format:List ^| findstr "="') do (set %%a)
Set Second=0%Second%
Set Second=%Second:~-2%
Set Minute=0%Minute%
Set Minute=%Minute:~-2%
Set Hour=0%Hour%
Set Hour=%Hour:~-2%
Set Day=0%Day%
Set Day=%Day:~-2%
Set Month=0%Month%
Set Month=%Month:~-2%
set UTCTIME=%Hour%:%Minute%:%Second%
set UTCDATE=%Year%%Month%%Day%
wmic TIMEZONE get * /value

样本输出

Bias=-480
Caption=(UTC-08:00) Pacific Time (US & Canada)
DaylightBias=-60
DaylightDay=2
DaylightDayOfWeek=0
DaylightHour=2
DaylightMillisecond=0
DaylightMinute=0
DaylightMonth=3
DaylightName=Pacific Daylight Time
DaylightSecond=0
DaylightYear=0
Description=(UTC-08:00) Pacific Time (US & Canada)
SettingID=
StandardBias=0
StandardDay=1
StandardDayOfWeek=0
StandardHour=2
StandardMillisecond=0
StandardMinute=0
StandardMonth=11
StandardName=Pacific Standard Time
StandardSecond=0
StandardYear=0

在这个例子中,我想要UTC信息,这样当我输出到日志时,我可以插入UTC信息:

wmic TIMEZONE get * /value | FIND /I "Description"

现在我想解析字符串:

(注意.cmd脚本/程序中,%%p,%p仅用于控制台)

FOR /F "tokens=2 delims==" %P IN ('wmic TIMEZONE get * /value ^| FIND /I "Description"') DO Echo %P> var_UTC.txt

现在我想设置一个包含UTC 的变量

SET /P $SYSTEM_UTC= < var_UTC.txt

现在我想在写日志时使用变量

(注意在变量中使用它可以控制文本)

echo 2020-12-15 [INFO] %$SYSTEM_UTC% > program.log

您可以查看我的Github repo中的一些复杂程序

最新更新