在批处理文件中获取前一周的数字

在批处理文件中获取前一周的数字

我正在使用以下代码在批处理文件中获取当前周的两位数。

 for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mm=%%a&set dd=%%b&set yy=%%c)
 set /a dd=100%dd%%%100,mm=100%mm%%%100
 set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,Jd=153*m+2
 set /a Jd=Jd/5+dd+y*365+y/4-y/100+y/400-32045
 set /a y=yy+4798,Jp=y*365+y/4-y/100+y/400-31738,t=Jp+3,Jp=t-t%%7
 set /a y=yy+4799,Jt=y*365+y/4-y/100+y/400-31738,t=Jt+3,Jt=t-t%%7
 set /a y=yy+4800,Jn=y*365+y/4-y/100+y/400-31738,t=Jn+3,Jn=t-t%%7
 set /a Jr=%Jp%,yn=yy-1,yn+=Jd/Jt,yn+=Jd/Jn
 if %Jd% GEQ %Jn% (set /a Jr=%Jn%) else (if %Jd% GEQ %Jt% set /a Jr=%Jt%)
 set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1
 if %cw% LSS 10 set cw=0%cw%

但是,我想修改代码,以便显示前一周的两位数。您能建议我该如何更改代码才能获得此结果吗?

答案1

通常情况下,你只需从中减去一%cw%
但有两个可能的陷阱,

  1. 前导零会导致该数字被解释为八进制,并且 08/09 会出现错误;
  2. 如果%cw%是 1,则没有第 0 周,而是上一年的第 52/53 周

要解决问题 1:

set /A cw=1%cw%-101
set "cw=0%cw%"
set "cw=%cw:~-2%"

或者替换倒数第二行你的代码

 set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1

和 :

 set /a diff=Jd-Jr,cw=diff/7,wd=diff%%7,wd+=1

这仍然可以返回 00 的 cw。

由于您的代码可能源自Ritchie Lawrence 批处理函数库最好的办法是:

  • 使用 wmic 或 powershell 以更可靠的方式获取当前日期。
  • 将日期转换为数字库函数DateToMJD
  • 从该数字中减去 7
  • 使用库函数 MJDtoDate 转换回来
  • 最后使用具有年份、星期、星期几部分的库函数 DateToWeek。

按照 ISO8601 的规定,12 月 29 日至 31 日/1 月 1 日至 3 日的周数可以属于其他年份,因此周数应始终与年份结合在一起。

相关内容