中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-31 12:13
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 从日期判断星期 查看 2,405 回复 21
楼 主 从日期判断星期 发表于 2007-02-06 03:11 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
比如20060110
如何通过以上日期判断是星期几?
2 发表于 2007-02-06 03:24 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  提供一个思路:先确定一个已经知道是星期几的日期,然后计算20060110和那个日期相差多少天,然后用差值来除以7,取余数——问题的关键在于计算两个日期的差值,这又转化为以前那个经典老话题:某一日期的N天前是哪一天?
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
3 发表于 2007-02-06 05:22 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
取得n天前的日期我会,但就是不会计算星期
比如今天是20070205 星期一 n天前的日期是20061210
该怎么计算呢?
20070205减20061210 怎么减呢?
4 发表于 2007-02-06 08:26 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
版主说的不错,你首先得有一个参照物,剩下的就是将日期间距转换为10进制的天数并减去7-参照星期,然后再用7除求余
5 发表于 2007-02-06 09:23 ·  中国 北京 朝阳区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
再来一个另类星期几查询:)




  1. @ echo off && setlocal
  2. :: Redtek.2006 bbs.cn-dos.net 查询某年/月/日是星期几



  3. set /p setDate=请输入要查询的日期:(格式:年-月-日)


  4. :: 备份当前日期并设置新日期

  5. for /f %%i in ('date/t') do set "当天日期备份=%%i"
  6. echo %setDate%|date >nul


  7. :: 显示查询日期并恢复当前日期为备份日期

  8. echo. && echo 您要查询的日期详细信息为: %date% ] && echo.
  9. echo %当天日期备份%|date >nul




  10. Pause
Redtek@sweetmeet.com发表于: 2007-02-05 20:26



注: 如果是服务器等与日期相连紧密的计算机请勿使用此代码。

   因实现原理是先备份当前日期,再设置指定日期,利用系统%date%得到星期几,然后再还原计算前的日期。

   在计算机上安装了有些对日期敏感的程序,如:进行Java开发的 JCreator pro 等敏感软件,如果日期被更改为过去时,就是再改回来其已经作废。
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
6 发表于 2007-02-06 09:38 ·  中国 吉林 四平 联通
高级用户
★★★
积分 859
发帖 413
注册 2006-08-14 21:55
19年会员
UID 60532
状态 离线
楼上兄,一个字,“赞”
7 发表于 2007-02-06 14:39 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
利用刚学会的VBS

@echo off
for %%n in (week1-日 week2-一 week3-二 week4-三 week5-四 week6-五 week7-六) do set Tmp$=%%n&&call set %%Tmp$:-==%%

:loop
cls
echo.
set input=
set /p input= 请输入日期(格式: 2007/1/1):
if not defined input exit
echo.
>tmp.vbs echo wscript.echo weekday(#%input%#)
for /f "tokens=* delims=-" %%i in ('"cscript //nologo tmp.vbs"') do call echo 星期%%week%%i%%
del tmp.vbs
echo.
pause
goto loop


加上一个根据 9 楼修改的:

@echo off
for %%n in (week1-日 week2-一 week3-二 week4-三 week5-四 week6-五 week7-六) do set Tmp$=%%n&&call set %%Tmp$:-==%%

:loop
cls
echo.
set input=
set /p input= 请输入日期(格式: 20070101):
if not defined input exit
echo.
>tmp.vbs echo wscript.echo Weekday(CDate("%input:~0,4%-%input:~4,2%-%input:~6,2%"))
for /f "tokens=* delims=-" %%i in ('"cscript //nologo tmp.vbs"') do call echo 星期%%week%%i%%
del tmp.vbs
echo.
pause
goto loop


[ Last edited by zh159 on 2007-2-6 at 03:07 PM ]
8 发表于 2007-02-06 16:29 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
5楼的方法确实不错,不过要更改系统时间,似觉总有点不够完美,各位还有什么高招吗?
9 发表于 2007-02-06 17:55 ·  中国 浙江 杭州 电信
初级用户
积分 128
发帖 31
注册 2006-10-23 08:05
19年会员
UID 67855
性别 男
状态 离线
何不用VBS呢?

<script language="vbscript">
<!--
MsgBox Weekday(CDate("2006-01-10")-1)
-->
</script>
10 发表于 2007-02-06 21:16 ·  中国 江苏 苏州 联通
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
19年会员
UID 60484
状态 离线
记得小时候奥数有个公式的,可以再查下。
11 发表于 2007-02-08 16:40 ·  中国 湖南 长沙 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
取得两个日期的差已经解决,现在的问题是怎么判断星期?
//比如 已知2007/02/08/星期四 如何确定 18天前的星期呢?
就是如何将当前星期减1或2..........?

[ Last edited by 26933062 on 2007-2-8 at 03:47 AM ]
12 发表于 2007-02-08 22:01 ·  中国 吉林 四平 联通
高级用户
★★★
积分 859
发帖 413
注册 2006-08-14 21:55
19年会员
UID 60532
状态 离线
帮你顶一下,越来越有难度了
13 发表于 2007-02-09 05:23 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
Originally posted by 26933062 at 2007-2-8 03:40:
取得两个日期的差已经解决,现在的问题是怎么判断星期?
//比如 已知2007/02/08/星期四 如何确定 18天前的星期呢?
就是如何将当前星期减1或2..........?

...

@echo off
for %%n in (week1-日 week2-一 week3-二 week4-三 week5-四 week6-五 week7-六) do set Tmp$=%%n&&call set %%Tmp$:-==%%

:loop
cls
echo.
set input=
set week=+0
set /p input= 请输入日期(格式: 20070101):
if not defined input exit
set /p week= 请输入间隔天数(格式: +8(-8),默认为 0):
echo.
>tmp.vbs echo wscript.echo Weekday(CDate("%input:~0,4%-%input:~4,2%-%input:~6,2%")%week%)
for /f "tokens=* delims=-" %%i in ('"cscript //nologo tmp.vbs"') do call echo 星期%%week%%i%%
del tmp.vbs
echo.
pause
goto loop
14 发表于 2007-02-09 06:00 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
MsgBox WeekdayName(Weekday(CDate(Now)))
15 发表于 2007-02-09 06:05 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
借楼上的:
MsgBox WeekdayName(Weekday(CDate(Now)-18))

+-天数

@echo off
:loop
cls
echo.
set input=
set week=+0
set /p input= 请输入日期(格式: 20070101):
if not defined input exit
set /p week= 请输入间隔天数(格式: +8(-8),默认为 0):
echo.
>tmp.vbs echo wscript.echo WeekdayName(Weekday(CDate("%input:~0,4%-%input:~4,2%-%input:~6,2%")%week%))
for /f %%i in ('"cscript //nologo tmp.vbs"') do call echo %%i
del tmp.vbs
echo.
pause
goto loop


[ Last edited by zh159 on 2007-2-8 at 06:42 PM ]
论坛跳转: