![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-25 23:05 |
共 47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 求N天前日期的批处理 |
| 可打印版本 7,273 / 4 |
| 第1楼 namejm | 发表于 2007-06-07 21:29 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
求N天前日期的批处理 经常有人询问N天前的日期如何计算,因为牵涉到大月小月、平年闰年的问题,代码将会比较复杂,让人望而却步。
虽然两年前willsort曾经发出过这样的代码(请参考:(已结)如果在WINDOWS下DOS命令行删除N天以前的文件),尽管思路极其简单:把日期转化为相对数字,做完减法之后,再把相对数字转化为日期,但是,2472632、146097之类的数字来得太过突兀,让人摸不着头脑,说实话,限于水平,我现在都还看得一头雾水。 现在发三个求N天前日期的批处理( 日期可以带星期,但是,必须以年月日的顺序排列,年份必须是四位,否则会出错),在关键部分都有注释,比willsort的容易懂一点: 代码1: 代码2: 代码3: [ Last edited by namejm on 2007-6-8 at 11:15 PM ] |
|
| 第2楼 vkill | 发表于 2007-06-07 21:46 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
用 ruby 简单多了,我只是想追求 “用最短的代码最快时间最合适的工具解决”,没有别的意思~
puts Data.today-3 [ Last edited by vkill on 2007-6-7 at 10:28 PM ] |
|
| 第3楼 HAT | 发表于 2007-06-07 21:50 |
| 版主 发帖 5,017 积分 9,023 | |
|
学习
发一个使用VBS计算日期的批处理 |
|
| 第4楼 wwwyangxm | 发表于 2008-12-02 09:12 |
| 初级用户 发帖 27 积分 27 | |
|
我想问一下,楼主的第三个方案中set dat=2007-01-02是否为初始时间?昨晚我想了一个方案,不知道是否和楼主的一样?望解答一下,另:楼主的代码我看的不是很明白(方案三)
下面是的我方案: 假设初始时间坐标为1900-01-01 输入时间为date1 (任意时间) ,这样比较容易计算两个时日的差额(天数)tmp1,另外再输入想要查询的在date1前或者后的任意天数tmp2,如果是在date1前N天的,就计算结果为sum=tmp1+tmp2,(tmp2可正或者负,在date1日期后为正,在date1日期前面的为负),这样最后就可以得到一个距离初始时间的时间差额sum,根据1900-01-01为起止时间,计算差额在sum天的日期,应该是比较简单的。 以上的思路可以解决在任意日期的前后N天的日期,起止时间可以根据计算差额多少来设定,以便减少计算量。 由于知识有限,只能提供思路,望大侠们指导下,我的思路不知道是不是和第三个方案一样?说实话,第三个方案我还没完全看明白... |
|
| 第5楼 sea1112 | 发表于 2008-12-27 11:06 |
| 初级用户 发帖 119 积分 131 来自 gz | |
|
::判断当前日期的前一天
::首先直接把天数减1天 ::如果出来的是0天就把月减1天,天数是当月的最后一天。 ::如果出来的是0月就把年减1年,月数是当年的最后一月。 @echo off&setlocal enabledelayedexpansion set yyyy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% set /a nd=!dd!-1 ::如果象3月1日减一天是0天就... if !nd!==0 call :dd0 if !mm!==0 call :mm0 set yyyymmdd=!yyyy!-!mm!-!nd! echo 今天是:%date:~0,10% echo 昨天是:!yyyymmdd! pause :dd0 set /a mm=!mm!-1 for %%a in (1 3 5 7 8 10 12)do set %%add=31 set /a pddd=!yyyy!*10/4 set pd2d=!pddd:~-1,1! set 2dd=28 if !pd2d!==0 set 2dd=29 for %%b in (4 6 9 11)do set %%bdd=30 set nd=!%mm%dd! goto :eof :mm0 set /a yyyy=!yyyy!-1 set mm=12 set nd=31 goto :eof |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |