中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 请问如何取下个日期时间 上一主题 | 下一主题
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『楼 主』:  请问如何取下个日期时间

用date取时间日期,我现在想要取系统的下一个工作日日期,比如今天星期五20070406,我想取的就是下星期一20070409,如果是星期四20070405的话我要取的就是星期五20070406,不知道如何实现,希望大大们帮忙.
本人不知道如何让日期做算术运算,另外就是不知道如何判断星期的问题.

2007-4-7 06:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 2 楼』:  


dim Wday,today
today=date
Wday=Weekday(now)
Select Case (Wday)
    case 1 today=today+1
    case 2 today=today+1
    case 3 today=today+1
    case 4 today=today+1
    case 5 today=today+1
    case 6 today=today+3
    case 7 today=today+2
end select
WScript.echo "下一个工作日是:"&CDate(today)
试试这个?

2007-4-7 11:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 3 楼』:  


@echo off & setlocal enabledelayedexpansion
set condate=20070407
set today=%date:~0,4%%date:~5,2%%date:~8,2%
set /a num=%today%-%condate%
set /a num=!num!%%7
if %num%==0 set /a num=!today!+2&goto today
if %num%==1 set /a num=!today!+1&goto today
if %num%==2 set /a num=!today!+1&goto today
if %num%==3 set /a num=!today!+1&goto today
if %num%==4 set /a num=!today!+1&goto today
if %num%==5 set /a num=!today!+1&goto today
if %num%==6 set /a num=!today!+3&goto today

:today
echo 下一个工作日是:!num!
pause


2007-4-7 21:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 4 楼』:  

没有通用代码..

xp和2000里的格式都不一样。

至于日期计算是算法问题。.和这里无关。

至于星期 %date%里面已经包含了。



知,不觉多。不知,乃求知
2007-4-8 06:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 5 楼』:  

谢谢wudixin96朋友。2楼是vbs脚本好像可以用,3楼的脚本有问题,如果隔年份就会出问题了~~不知道能不能解决这个问题?或者vbs脚本的变量我怎么在bat脚本下取到,是否可以??

[ Last edited by lililulula on 2007-4-8 at 04:27 PM ]

2007-4-8 13:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 6 楼』:  

自己先顶下 顺便把3楼的脚本消化下~~~

2007-4-9 05:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 7 楼』:  

这么写太麻烦了。。

可以利用系统自带的功能进行分析。。。

假设操作系统为windows xp。。

则以下脚本可以用。。(这里不进行错误判断,现场还原也不对时间判断,23:59:59秒使用时,会使日期返回错误。)

@echo off
set OldDate=%date%
:reInput
echo 请输入你要查询的日期。格式为:2007-04-05。
set /p input=^>
echo %input% | date >nul
if not errorlevel 1 (
       echo 下一个工作日是: %date:~11,3%
       ) else (
       goto :reInput
      )
echo %OldDate% | date >nul
pause



知,不觉多。不知,乃求知
2007-4-9 07:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 8 楼』:  

哦。。这个脚本可以查询的日期为 XP 系统支持的任意日期。

如果不在特定时间点使用,则此脚本基本无错。



知,不觉多。不知,乃求知
2007-4-9 07:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 9 楼』:  

我还,没有仔细看楼主的题目。其实也很简单。

我曾经发过关于任意日期运算的帖子,可以查询任意年月日(类似于万年历的)。
不过大家好象都不喜欢,我就把贴删掉了。
日期运算需要定义时间。。



知,不觉多。不知,乃求知
2007-4-9 08:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 10 楼』:  

flyinspace朋友 你的7楼脚本只是查询输入日期当天是星期几,不过我还是要问下关于echo %input% | date >nul和echo %OldDate% | date >nul两句我有点不懂,后面的| date>nul是把取到的日期置空?但是我单单实验set /p input=:> echo %input% | date>nul输入的日期会修改成为当前系统日期,而脚本中echo %OldDate% | date >nul加上后系统日期便不会修改,具体含义不是很明白,希望flyinspace朋友能告诉我下.

而我的要求是取得系统日期后判断下一个工作日,然后取的日期,3楼的脚本在搁年会出错,不知道有社么办法可以解决.

2007-4-10 00:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 11 楼』:  

问题我已经解决,2楼告诉了我怎么做日期算术运算,我从中得到启发,由于2楼的思考方法在脚本运行的时候如果跨年就会出错,所以我直接判断星期字符,就避免了这个问题,脚本如下(2000下):
@echo off
set day=%date:~-10,4%%date:~-5,2%%date:~-2,2%
set date=%date:~-14,3%
if %date%==星期一 set /a nextworkday=%day%+1&goto workday
if %date%==星期二 set /a nextworkday=%day%+1&goto workday
if %date%==星期三 set /a nextworkday=%day%+1&goto workday
if %date%==星期四 set /a nextworkday=%day%+1&goto workday
if %date%==星期五 set /a nextworkday=%day%+3&goto workday
if %date%==星期六 set /a nextworkday=%day%+2&goto workday
if %date%==星期日 set /a nextworkday=%day%+1&goto workday
:workday
echo 下一个工作日是:%nextworkday%
pause


还有一个问题就是为什么多重设置date的时候变量名要是date才有效?比如
set date=%date:~0,10%
set date=%date:-=%
date变量为今天日期20070409
而如果这样却无效
set day=%date:~0,10%
set day=%date:-=%
date日期为2007-04-09,第二句set无效
延迟变量开启也没有帮助

[ Last edited by lililulula on 2007-4-9 at 12:36 PM ]

2007-4-10 01:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 12 楼』:  

你的系统是windows 2000。。

使用我的脚本时应该会有错误提示:没有操作数。

set date=%date:~-14,3%
另外,最好不要定义已有的环境变量。

隔年出错是因为没有对年份进行判断。(有闰年、平年的区别)而且每年的第一个星期都会有偏差。。。

还有,我怎么看,这个脚本都应该有问题的。。

即使在2007年内,也肯定有几天会出现错误。

时间判断不够严密。



知,不觉多。不知,乃求知
2007-4-10 02:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 13 楼』:  

flyinspace朋友你说的2楼脚本确实有问题,我按照星期判断的话,取当天星期,字符串比较,我想应该不会有问题了,因为我取的就是系统后面的星期,然后判断的话,情况也就7种啊~~~~另外你说不要定义已有的黄鲸变量是什么意思??不是很明白

[ Last edited by lililulula on 2007-4-9 at 01:28 PM ]

2007-4-10 02:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 14 楼』:  

建议你把批处理的教程先看一遍。

你的问题我给你指出吧。

假设 2007年4月30日。
则怎么判断?



知,不觉多。不知,乃求知
2007-4-10 03:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 15 楼』:  

你一说倒真是这样,我后来也看了2楼的脚本也有着个问题,我的脚本也有这个问题,不过3楼的vbs脚本没问题,有wekekday这个自带参数~~~~,看来考虑问题没考虑全面,谢谢楼上提醒,我想知道有办法解决这个问题吗?或是vbs最后的&CDate(today),bat脚本要取这个变量值该怎么取???

2007-4-10 03:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: