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,可以下载看看






#学习路径#
全部评论

相关推荐

02-03 10:14
东南大学 Java
求各位大佬帮忙改改简历提提建议
黑皮白袜臭脚体育生:简历条例统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写 可以看我帖子简历话术写法
点赞 评论 收藏
分享
2024-12-13 17:58
门头沟学院 Java
牛客379906129号:别想太多,只管投只管面,提高自己就好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务