如果您想要儒略日数,您可以使用中发布的方法我接受的答案 https://stackoverflow.com/questions/11210997/dos-date-math/11213142#11213142在前面的链接中给出。但是,“一年中的某天”只是 1 到 365 之间的数字(闰年为 366)。下面的批处理文件正确计算它:
@echo off
setlocal EnableDelayedExpansion
set /A i=0, sum=0
for %%a in (31 28 31 30 31 30 31 31 30 31 30 31) do (
set /A i+=1
set /A accum[!i!]=sum, sum+=%%a
)
set /A month=1%Date:~0,2%-100, day=1%Date:~3,2%-100, yearMOD4=%Date:~6,4% %% 4
set /A dayOfYear=!accum[%month%]!+day
if %yearMOD4% equ 0 if %month% gtr 2 set /A dayOfYear+=1
echo %dayOfYear%
Note:这依赖于日期格式MM/DD/YYYY
.
编辑 2020/08/10: 添加了更好的方法
我修改了该方法,现在使用wmic
获取日期。新方法也缩短了,但并不简单!;)
:
@echo off
setlocal
set "daysPerMonth=0 31 28 31 30 31 30 31 31 30 31 30"
for /F "tokens=1-3" %%a in ('wmic Path Win32_LocalTime Get Day^,Month^,Year') do (
set /A "dayOfYear=%%a, month=%%b, leap=!(%%c%%4)*(((month-3)>>31)+1)" 2>NUL
)
set /A "i=1, dayOfYear+=%daysPerMonth: =+(((month-(i+=1))>>31)+1)*%+leap"
echo %dayOfYear%