dos batch file批处理实现计算前N天日期算法
任务 : 计算前N天是什么日期
很多人用脚本,比如python,ruby,perl,这些都有现成的日历算法api, 但是要脱离这些,用纯dos batch file批处理怎么实现?因为有时会用到纯批处理
这里有一些别人实现好的批处理算法
关键代码如下
:Date2Day setlocal ENABLEEXTENSIONS for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do ( set yy=%%a & set mm=%%b & set dd=%%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,j=153*m+2 set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 endlocal&set %2=%j%&goto :EOF :Day2Date setlocal ENABLEEXTENSIONS set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5 set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10 (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%) endlocal&set %2=%yy%-%mm%-%dd%&goto :EOF
特别推荐的是Ritchie Lawrence这个人实现的批处理算法,算法思想就是利用天文历法算法,Date2Day先把现在的日期(公历)换算成儒略日(julian day),再减去天数,Day2Date再把减后的天数的儒略日换算成日期(公历)
这个作者Ritchie Lawrence有一个主页,里面还有很多有用的批处理函数
另外,关于这个算法的由来可以参考外文书 Astronomical Algorithms
也可以搜索github
https://github.com/search?utf8=%E2%9C%93&q=+Astronomical+Algorithms&type=
里面有很多这本书天文算法的实现
很多人都很忽视dos批处理,其实有时很有用,但是深度掌握却很难,很多功能是需要自己去变通实现的.
推荐一本dos批处理的书 Batchography: The Art of Batch Files Programming
这个本书还有源代码github,可以下载看看