批处理文件中不支持区域设置的%DATE%和%TIME%?


16

%DATE%%TIME%环境变量提供命令行和批处理文件内的当前日期和时间在Windows机器上。

可悲的是,这些值是区域感知的!也就是说,在德国的机器上,您将获得

26.1.2011

代替

2011-26-01

如果您想在文件名中使用此变量,这将使排序更加麻烦。

有什么简单的方法可以YYYY-MM-DD在Windows批处理文件中保留不支持区域设置的日期字符串?

目前,我正在使用这种相当笨拙的解决方法:

for /f "tokens=1,2,3,4 delims=. " %%i in ('date /t') do set date=%%k-%%j-%%i
echo %date%

但现在这是德语语言环境中具体-显然,一个完全独立的解决办法是漂亮。

有问题的操作系统是Server2008。如果有可能,我宁愿不使用第三方工具。

Answers:


22

进行了几次尝试(Rob van der Woude进行了一些尝试),但是在所有语言环境中都没有真正起作用。但是,您可以通过以下几种易于解析的格式来获取当前时间

wmic os get LocalDateTime

以下内容已使您至少具有UTC:

@echo off
rem Get the time from WMI - at least that's a format we can work with
set X=
for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do if not defined X set X=%%x
echo.%X%

rem dissect into parts
set DATE.YEAR=%X:~0,4%
set DATE.MONTH=%X:~4,2%
set DATE.DAY=%X:~6,2%
set DATE.HOUR=%X:~8,2%
set DATE.MINUTE=%X:~10,2%
set DATE.SECOND=%X:~12,2%
set DATE.FRACTIONS=%X:~15,6%
set DATE.OFFSET=%X:~21,4%

echo %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY% %DATE.HOUR%:%DATE.MINUTE%:%DATE.SECOND%.%DATE.FRACTIONS%

但是,您可能需要考虑时区偏移量(除非它是用于日志文件的,否则我将始终使用UTC),但这没什么可计算的:-)


1
太好了,这看起来完全符合我的需求!谢谢。
Pekka

2
记录:for /f %%x in ('wmic os get localdatetime ^| findstr /b [0-9]') do @set X=%%x稍微好一点。这里还有一个更紧凑的版本,即该注释中
Tomalak 2014年

查找和更新您在其中写过东西的所有旧实例有点困难:)。我现在可能会使用Win32_UTCTime和Win32_LocalTime。
2014年

真的很棒!
jeromerg

正如@Tomalak所说,findstr解决方案要好得多,就我而言,原始for(不带skip)重复3次。一次输入单词"LocalDateTime",第二次输入实际日期,第三次输入空值(也许换行?)。
cavpollo

9

这是我一直在使用的两种方法,无论Windows版本或本地时间设置如何,该方法似乎都可以使用:

FOR /f %%a in ('WMIC OS GET LocalDateTime ^| find "."') DO set DTS=%%a
set CUR_DATE=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2%

这将以以下ISO标​​准格式设置名为%CUR_DATE%的变量:

yyyy-mm-dd

我曾尝试使用&&将其设置为单行,但似乎没有用,所以我采用了两行版本。希望这可以帮助。


0

我使用这个技巧来获取UTC。

for /f "tokens=*" %%i in ('tzutil /g') do set CTZ=%%i
tzutil /s UTC
set UTC=
for /f  "skip=1 delims=" %%i in ('WMIC OS GET LocalDateTime') do if not defined UTC set UTC=%%i
tzutil /s "%CTZ%"
set UTC=%UTC:~0,4%-%UTC:~4,2%-%UTC:~6,3%T%UTC:~8,13%
echo %UTC%

但是,这样做的副作用是将整个系统短暂更改为UTC。在个人工作站上,这可能是可以的,但不能确定大型生产服务器会受到什么影响,无论如何应该将其设置为UTC。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.