[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] 批处理计算星期为什么只有2012年2月20日显示不正常?

我是根据W的值来计算星期几的,只有到了2012年2月20日显示不正常,明明是星期一,算出的值缺是2,前后几天都是正常,请教高人指点啊!
  1. @echo off
  2. set /a y = %date:~0,4%
  3. if %date:~5,1% EQU 0 set /a m = %date:~6,1%
  4. if %date:~5,1% NEQ 0 set /a m = %date:~5,2%
  5. if %date:~8,1% EQU 0 set /a d = %date:~9,1%
  6. if %date:~9,1% NEQ 0 set /a d = %date:~8,2%
  7. if %m% EQU 1 set /a m = 13
  8. if %m% EQU 2 set /a m = 14
  9. set /a w = (d + 2*m+3*(m+1)/5+y+y/4-y/100+y/400) - ((d + 2*m+3*(m+1)/5+y+y/4-y/100+y/400)/7)*7 + 1
  10. set /a yy = (y - 4*(y/4))
  11. if %m% EQU 13 if %yy% EQU 0 set /a w = w -2
  12. if %m% EQU 14 if %yy% EQU 0 set /a w = w -2
  13. if %m% EQU 13 if %yy% NEQ 0 set /a w = w - 1
  14. if %m% EQU 14 if %yy% NEQ 0 set /a w = w - 1
  15. if %w% EQU -1 set /a w = 6
  16. if %w% EQU 0 set /a w = 7
  17. @echo %w%
复制代码

居然有人这么做……

TOP

那两句 if neq 的判断没有必要,反而有逻辑错误,应写成:
  1. if %date:~5,1% EQU 0 (set m=%date:~6,1%) else set m=%date:~5,2%
  2. if %date:~8,1% EQU 0 (set d=%date:~9,1%) else set d=%date:~8,2%
复制代码
或者按惯例直接写成一句:
  1. set /a m=1%date:~5,2%-100,d=1%date:~8,2%-100
复制代码
另,也写过日期转星期的函数,如下:
  1. :::::::::::::::weeks 日期转星期函数::::::::::::::::::
  2. :: 用法:                                          ::
  3. ::  call :weeks Date retvar                        ::
  4. ::        %1  Date    要计算的日期,不判断是否合法 ::
  5. ::                    格式(YYYYMMDD)             ::
  6. ::        %2  retvar  用于保存星期(1~7)的变量名  ::
  7. :::::::::::::::::::::::::::::::::::::::::::::::::::::
  8. :weeks Date retvar   ###### 公式算法
  9. setlocal disabledelayedexpansion&set "date=%~1"
  10. set /a m=1%date:~4,2%-100,m+=!(m/3)*12,w=(7%date:~6,2%+2*m+3*(m+1)/5+(y=%date:~,4%-m/13)+y/4-y/100+y/400)%%7+1
  11. set "%~2=%w%"
复制代码

TOP

明明是星期二

TOP

谢谢版主,问题解决了!

TOP

返回列表