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

[数值计算] 根据给定的两个起止日期按先后/早晚顺序列出指定范围内的所有日期

本帖最后由 pcl_test 于 2017-4-6 08:42 编辑

在其他论坛看到有这样一个需求:
建立以日期为名字的文件夹,从20100406到20101230

  感觉这个需求有很多地方都可能用得到,因此,我想把这个问题扩展一下,使得它更具有通用性,具体要求为:

  1、能在批处理界面中通过手工输入起止日期的方式,自动生成起止日期范围内的所有日期数列(必须考虑平年闰年大月小月),按日期早晚输出到文本中去,一行一条数据,日期格式为8位的纯数字格式,比如20100407;
  2、如果在批处理界面中只输入一个日期,将以系统当前日期为起点,以输入的日期为终点,按照上一条的格式输出数据;
  3、最好不生成临时数据。
=====================================

  再加一条:
  4、最好通过纯批处理来处理,速度不能太慢。

  对第2点做稍许变动:如果只输入一个日期,则和系统当前日期做比较,以较早的日期为起点,较晚的日期为终点,按照第1条的要求输出数据。

  其中,难点在于第1和第3点,把这两点解决了,第2点将迎刃而解。

  难点提示:
  1、年份有平年闰年之分,日期大小月各不相同;
  2、系统的日期格式有很多种,在处理时需要做格式化,统一成形如YYYYMMDD的8位纯数字;
  3、若照搬以前那个批处理版万年历的代码,将难以按照日期早晚的顺序输出数据。


  关于闰年的判断方法(转自百度百科:http://baike.baidu.com/view/29649.htm?fr=ala0_1):
  判定公历闰年遵循的一般规律为: 四年一闰,百年不闰,四百年再闰.
  公历闰年的精确计算方法:(按一回归年365天5小时48分45.5秒)
  ①、普通年能被4整除的为闰年。(如2004年就是闰年,1901年不是闰年) 
  ②、世纪年能被100整除而不能被400整除的不是闰年。(如2000年是闰年,3200年是闰年,1900年不是闰年)
  ③、对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年.(如172800年是闰年,864000年不是闰年)
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

最好通过纯批处理来实现。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  对第2点做稍许变动:如果只输入一个日期,则和系统当前日期做比较,以较早的日期为起点,较晚的日期为终点,按照第1条的要求输出数据。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  hanyeguxing在4楼的代码没有做准确的平年闰年检测;FOR在7楼的代码输出的格式为 2010-4-1 ,由于未做充分测试,其他问题尚未发现。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

Re FOR:
  运行了你修改后的代码,发现生成350多K的数据竟然只花费了0秒——嘿嘿,貌似 echo %time% 要改成 call echo %%time%% 才对。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表