中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 查N天前日期 上一主题 | 下一主题
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『楼 主』:  查N天前日期

帮测试一下 查N天前日期 添一个1752年9月3日后的星期公式 拿论坛前辈们代码用一下 使代码完善一点
@echo off&color 0b&setlocal enabledelayedexpansion&mode con cols=45 lines=25
:st
set jt=今天是
:ymd
cls
set p1=%date:~0,4%
set p2=%date:~5,2%
set p3=%date:~8,2%
for /l %%a in (1,1,3) do (
for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i
)
:nxt
set/a p2-=1
if %p2% equ 0 set/a p1-=1&&set p2=12
set/a PN2="^!(p1%%4) & ^!(^!(p1%%100)) | ^!(p1%%400)",PN2=28+PN2
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do (
set/a p3=p3+%%i
set pt=%%i
)
if not "%tt%" == "" (
if %p3% leq %tt% goto nxt
)
:ppp
set/a PN2="^!(p1%%4) & ^!(^!(p1%%100)) | ^!(p1%%400)",PN2=28+PN2
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set pt=%%i
set/a p3=p3-tt
set y=%p1%
set m=%p2%
if %m% leq 2 (set/a y-=1,m+=12)
set /a w=(p3+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7
set /a w1=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7
set xq=日一二三四五六
set /a w2=w1+pt, day=1
if %p1% gtr 1949 set/a mn=p1-1949
if %p1% gtr 1874 if %p1% lss 1909 set/a mn=p1-1874
if %p1% gtr 1908 if %p1% lss 1912 set/a mn=p1-1908
if %p1% gtr 1911 if %p1% lss 1950 set/a mn=p1-1911
if %p1% gtr 1949  set mn=建国%mn%周年
if %p1% gtr 1874 if %p1% lss 1909 set mn=光绪 %mn% 年
if %p1% gtr 1908 if %p1% lss 1912 set mn=宣统 %mn% 年
if %p1% gtr 1911 if %p1% lss 1950 set mn=民国 %mn% 年

for /f "tokens=1,2" %%i in ('more/e +78^< %~f0') do if "%%i"=="%p2%%p3%" set nu=%%j
    set sx=猴鸡狗猪鼠牛虎兔龙蛇马羊
    set tg=庚辛壬癸甲乙丙丁戊己
    set dz=申酉戌亥子丑寅卯辰巳午未
    set /a sxnum=p1%%12
    set /a tgnum=%p1:~-1%
echo.  农历 !tg:~%tgnum%,1!!dz:~%sxnum%,1!年    [!sx:~%sxnum%,1!]年
echo.  %p1%年%p2%月 %jt%:%p1%年%p2%月%p3%日 星期!xq:~%w%,1!
echo.                %mn%
echo.
echo.                %nu%
echo.
echo.    日   一   二   三   四   五   六
echo. ━━━━━━━━━━━━━━━━━━━
set /p= <nul
for /l %%i in (0,1,37) do (
    set "temp=  "
    if %%i GEQ %w1% if %%i LSS %w2% (
        set temp= !day!
        set temp=!temp:~-2!
        if !p3! EQU !day! set temp=★
        set /a day+=1
    )
    set /p=   !temp!<nul
    set /a "wm=(%%i+1)%%7"
    if !wm! equ 0 echo.&echo.&set /p= <nul
)
echo.
echo  ━━━━━━━━━━━━━━━━━━━
for %%a in (p1 p2 p3 nu mn) do set %%a=
:stt
SET/p TT=你想知道多少天前的日期?
if "%tt%" =="" goto :eof
echo %tt%|findstr "^[0-9]*$">nul&&goto ys||echo 只能输入数字0-9&pause&goto stt
:ys
set jt=你查询的是
goto ymd
11 新年元旦 
22 世界湿地日 
27 国际声援南非日 
210 国际气象节 
212 国际足球比赛日 
214 西方情人节 
31 国际海豹日 
33 全国爱耳日 
38 国际妇女节 
312 植树节 孙中山逝世纪念日 
314 国际警察日 
315 国际消费者权益日 
317 中国国医节 国际航海日 
321 世界森林日 消除种族歧视国际日 
321 世界儿歌日 
322 世界水日 
323 世界气象日 
324 世界防治结核病日 
325 全国中小学生安全教育日 
33 巴勒斯坦国土日 
41 愚人节 全国爱国卫生运动月(四月) 税收宣传月(四月) 
47 世界卫生日 
422 世界地球日 
423 世界图书和版权日 
424 亚非新闻工作者日 
51 国际劳动节 
54 中国五四青年节 
55 碘缺乏病防治日 
58 世界红十字日 
512 国际护士节 
515 国际家庭日 
517 世界电信日 
518 国际博物馆日 
520 全国学生营养日 
523 国际牛奶日 
531 世界无烟日 
61 国际儿童节 
65 世界环境日 
66 全国爱眼日 
617 防治荒漠化和干旱日 
623 国际奥林匹克日 
625 全国土地日 
626 国际反毒品日 
71 中国共产党建党日 世界建筑日 
72 国际体育记者日 
77 中国人民抗日战争纪念日 
711 世界人口日 
730 非洲妇女日 
81 中国建军节 
88 中国男子节(爸爸节) 
815 日本正式宣布无条件投降日 
98 国际扫盲日 国际新闻工作者日 
910 教师节 
914 世界清洁地球日 
916 国际臭氧层保护日 
918 九·一八事变纪念日 
920 国际爱牙日 
927 世界旅游日 
101 国庆节 世界音乐日 国际老人节 
101 国际音乐日 
102 国际和平与民主自由斗争日 
104 世界动物日 
108 全国高血压日 
108 世界视觉日 
109 世界邮政日 万国邮联日 
1010 辛亥革命纪念日 世界精神卫生日 
1013 世界保健日 国际教师节 
1014 世界标准日 
1015 国际盲人节(白手杖节) 
1016 世界粮食日 
1017 世界消除贫困日 
1022 世界传统医药日 
1024 联合国日 世界发展信息日 
1031 世界勤俭日 
117 十月社会主义革命纪念日 
118 中国记者日 
119 全国消防安全宣传教育日 
1110 世界青年节 
1111 国际科学与和平周 (本日所属的一周) 
1112 孙中山诞辰纪念日 
1114 世界糖尿病日 
1117 国际大学生节 世界学生节 
1121 世界问候日 世界电视日 
1129 国际声援巴勒斯坦人民国际日 
121 世界艾滋病日 
123 世界残疾人日 
125 国际经济和社会发展志愿人员日 
128 国际儿童电视日 
129 世界足球日 
1210 世界人权日 
1212 西安事变纪念日 
1213 南京大屠杀(1937年)纪念日! 紧记血泪史! 
1221 国际篮球日 
1224 平安夜 
1225 圣诞节 
1229 国际生物多样性日
[ Last edited by terse on 2008-2-20 at 07:06 PM ]


   此帖被 +9 点积分       点击查看详情   
评分人:【 everest79 分数: +9  时间:2008-2-20 19:04




简单!简单!再简单!
2008-2-4 13:47
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 2 楼』:  

好东西


2008-2-10 13:37
查看资料  发短消息  网志   编辑帖子  回复  引用回复
xhf3218
新手上路





积分 10
发帖 5
注册 2008-2-13
状态 离线
『第 3 楼』:  

好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好


2008-2-13 18:22
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 4 楼』:  

查N天后日期 准确度还未知 添上一个1752年9月3日后的星期公式 拿论坛前辈们代码用一下 受益非浅
@echo off&color 0b&setlocal enabledelayedexpansion&mode con cols=46 lines=25
set jt=今天是
:ymd
cls
set p1=%date:~0,4%
set p2=%date:~5,2%
set p3=%date:~8,2%
for /l %%a in (1,1,3) do (
for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i
)
:nxt
if %p2% equ 13 set/a p1+=1&&set p2=1
set/a PN2="^!(p1%%4) & ^!(^!(p1%%100)) | ^!(p1%%400)",PN2=28+PN2
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do (
set/a p3=%tt%+%p3%
set pt=%%i
)
if %p3% leq %pt% goto ppp
set/a p3=%p3%-%pt%
set tt=0&&set/a p2+=1&&goto nxt
:ppp
set y=%p1%
set m=%p2%
if %m% leq 2 (set/a y-=1,m+=12)
set /a w=(p3+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7
set /a w1=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7
set xq=日一二三四五六
set /a w2=w1+pt, day=1
if %p1% gtr 1949 set/a mn=p1-1949
if %p1% gtr 1874 if %p1% lss 1909 set/a mn=p1-1874
if %p1% gtr 1908 if %p1% lss 1912 set/a mn=p1-1908
if %p1% gtr 1911 if %p1% lss 1950 set/a mn=p1-1911
if %p1% gtr 1949  set mn=建国%mn%周年
if %p1% gtr 1874 if %p1% lss 1909 set mn=光绪 %mn% 年
if %p1% gtr 1908 if %p1% lss 1912 set mn=宣统 %mn% 年
if %p1% gtr 1911 if %p1% lss 1950 set mn=民国 %mn% 年

for /f "tokens=1,2" %%i in ('more/e +72^< %~f0') do if "%%i"=="%p2%%p3%" set nu=%%j
    set sx=猴鸡狗猪鼠牛虎兔龙蛇马羊
    set tg=庚辛壬癸甲乙丙丁戊己
    set dz=申酉戌亥子丑寅卯辰巳午未
    set /a sxnum=p1%%12
    set /a tgnum=%p1:~-1%
echo.  农历 !tg:~%tgnum%,1!!dz:~%sxnum%,1!年    [!sx:~%sxnum%,1!]年
echo.  %p1%年%p2%月  %jt%:%p1%年%p2%月%p3%日 星期!xq:~%w%,1!
echo.                %mn%
echo.
echo.                %nu%
echo.
echo.    日   一   二   三   四   五   六
echo. ━━━━━━━━━━━━━━━━━━━
set /p= <nul
for /l %%i in (0,1,37) do (
    set "temp=  "
    if %%i GEQ %w1% if %%i LSS %w2% (
        set temp= !day!
        set temp=!temp:~-2!
        if !p3! EQU !day! set temp=★
        set /a day+=1
    )
    set /p=   !temp!<nul
    set /a "wm=(%%i+1)%%7"
    if !wm! equ 0 echo.&echo.&set /p= <nul
)
echo.
echo  ━━━━━━━━━━━━━━━━━━━
for %%a in (p1 p2 p3 nu mn) do set %%a=
:st
SET/p TT=你想知道多少天后的日期?
if "%tt%" =="" goto :eof
echo %tt%|findstr "^[0-9]*$">nul&&goto ys||echo 只输入数字0-9&pause&goto st
:ys
set jt=你查询的是
goto ymd
11 新年元旦 
22 世界湿地日 
27 国际声援南非日 
210 国际气象节 
212 国际足球比赛日 
214 西方情人节 
31 国际海豹日 
33 全国爱耳日 
38 国际妇女节 
312 植树节 孙中山逝世纪念日 
314 国际警察日 
315 国际消费者权益日 
317 中国国医节 国际航海日 
321 世界森林日 消除种族歧视国际日 
321 世界儿歌日 
322 世界水日 
323 世界气象日 
324 世界防治结核病日 
325 全国中小学生安全教育日 
33 巴勒斯坦国土日 
41 愚人节 全国爱国卫生运动月(四月) 税收宣传月(四月) 
47 世界卫生日 
422 世界地球日 
423 世界图书和版权日 
424 亚非新闻工作者日 
51 国际劳动节 
54 中国五四青年节 
55 碘缺乏病防治日 
58 世界红十字日 
512 国际护士节 
515 国际家庭日 
517 世界电信日 
518 国际博物馆日 
520 全国学生营养日 
523 国际牛奶日 
531 世界无烟日 
61 国际儿童节 
65 世界环境日 
66 全国爱眼日 
617 防治荒漠化和干旱日 
623 国际奥林匹克日 
625 全国土地日 
626 国际反毒品日 
71 中国共产党建党日 世界建筑日 
72 国际体育记者日 
77 中国人民抗日战争纪念日 
711 世界人口日 
730 非洲妇女日 
81 中国建军节 
88 中国男子节(爸爸节) 
815 日本正式宣布无条件投降日 
98 国际扫盲日 国际新闻工作者日 
910 教师节 
914 世界清洁地球日 
916 国际臭氧层保护日 
918 九·一八事变纪念日 
920 国际爱牙日 
927 世界旅游日 
101 国庆节 世界音乐日 国际老人节 
101 国际音乐日 
102 国际和平与民主自由斗争日 
104 世界动物日 
108 全国高血压日 
108 世界视觉日 
109 世界邮政日 万国邮联日 
1010 辛亥革命纪念日 世界精神卫生日 
1013 世界保健日 国际教师节 
1014 世界标准日 
1015 国际盲人节(白手杖节) 
1016 世界粮食日 
1017 世界消除贫困日 
1022 世界传统医药日 
1024 联合国日 世界发展信息日 
1031 世界勤俭日 
117 十月社会主义革命纪念日 
118 中国记者日 
119 全国消防安全宣传教育日 
1110 世界青年节 
1111 国际科学与和平周 (本日所属的一周) 
1112 孙中山诞辰纪念日 
1114 世界糖尿病日 
1117 国际大学生节 世界学生节 
1121 世界问候日 世界电视日 
1129 国际声援巴勒斯坦人民国际日 
121 世界艾滋病日 
123 世界残疾人日 
125 国际经济和社会发展志愿人员日 
128 国际儿童电视日 
129 世界足球日 
1210 世界人权日 
1212 西安事变纪念日 
1213 南京大屠杀(1937年)纪念日! 紧记血泪史! 
1221 国际篮球日 
1224 平安夜 
1225 圣诞节 
1229 国际生物多样性日
[ Last edited by terse on 2008-2-20 at 07:00 PM ]




简单!简单!再简单!
2008-2-13 19:46
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xmi
初级用户





积分 125
发帖 56
注册 2008-2-20
状态 离线
『第 5 楼』:  

不行, 當我輸入2時 (無論什麼數目), 它都只出了以下的結果 <是20/0年01月08日 星期三> ?????


2008-2-20 15:36
查看资料  发短消息  网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 6 楼』:  

Originally posted by xmi at 2008-2-20 15:36: 不行, 當我輸入2時 (無論什麼數目), 它都只出了以下的結果 <是20/0年01月08日 星期三> ?????
会不会是机器时间格式问题? 我这里还没遇到这样的问题 原来论坛前辈们 都有很好的代码 我拿来用一下 更新一下




简单!简单!再简单!
2008-2-20 18:55
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 7 楼』:  

发一个 输入年月日 的
@echo off&color b&setlocal enabledelayedexpansion&mode con cols=45 lines=25
set jt=今天是
set p1=%date:~0,4%
set p2=%date:~5,2%
set p3=%date:~8,2%
:ymd
setlocal enabledelayedexpansion
for /l %%a in (1,1,3) do (
for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i
)
set/a PN2="^!(p1%%4) & ^!(^!(p1%%100)) | ^!(p1%%400)",PN2=28+PN2
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set pt=%%i
set y=%p1%
set m=%p2%
if %m% leq 2 (set/a y-=1,m+=12)
set /a w=(p3+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7
set /a w1=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7
set xq=日一二三四五六
set /a w2=w1+pt, day=1
if %p1% gtr 1949 set/a mn=p1-1949
if %p1% gtr 1949 set/a mn=p1-1949
if %p1% gtr 1874 if %p1% lss 1909 set/a mn=p1-1874
if %p1% gtr 1908 if %p1% lss 1912 set/a mn=p1-1908
if %p1% gtr 1911 if %p1% lss 1950 set/a mn=p1-1911
if %p1% gtr 1949  set mn=建国%mn%周年
if %p1% gtr 1874 if %p1% lss 1909 set mn=光绪 %mn% 年
if %p1% gtr 1908 if %p1% lss 1912 set mn=宣统 %mn% 年
if %p1% gtr 1911 if %p1% lss 1950 set mn=民国 %mn% 年

for /f "tokens=1,2" %%i in ('more/e +82^< %~f0') do if "%%i"=="%p2%%p3%" set nu=%%j
    set sx=猴鸡狗猪鼠牛虎兔龙蛇马羊
    set tg=庚辛壬癸甲乙丙丁戊己
    set dz=申酉戌亥子丑寅卯辰巳午未
    set /a sxnum=p1%%12
    set /a tgnum=%p1:~-1%
echo.  农历!tg:~%tgnum%,1!!dz:~%sxnum%,1!年   [!sx:~%sxnum%,1!] 年
echo.  %p1%年%p2%月  %jt%:%p1%年%p2%月%p3%日  星期!xq:~%w%,1!
echo.
echo.                %mn%
echo.
echo.                %nu%
echo.
echo.    日   一   二   三   四   五   六
echo. ━━━━━━━━━━━━━━━━━━━
set /p= <nul
for /l %%i in (0,1,37) do (
    set "temp=  "
    if %%i GEQ %w1% if %%i LSS %w2% (
        set temp= !day!
        set temp=!temp:~-2!
        if !p3! EQU !day! set temp=★
        set /a day+=1
    )
    set /p=   !temp!<nul
    set /a "wm=(%%i+1)%%7"
    if !wm! equ 0 echo.&echo.&set /p= <nul
)
echo.
echo  ━━━━━━━━━━━━━━━━━━━
for %%a in (p1 p2 p3 nu mn) do set %%a=
echo.  输入日期可查询当日星期并显示当月月历
echo.
:p1
set/p p1=输入4位年份   [回车]退出:
if "%p1%" =="" goto :eof
echo.%p1%|findstr "\<[1-9][0-9][0-9][0-9]\>" >nul&&goto p2||echo 输入4位年份(只能是0-9,首位不能为0)&pause&goto p1
:p2
set/p p2=输入月份      [回车]退出:
if "%p2%" == "" echo 不能为空&goto p2
if %p2% gtr 12 echo.错误输入&goto p2
if %p2% lss 1 echo.错误输入&goto p2
echo %p2%|findstr "^[0-9]*$">nul&&goto p3||echo 只能是0-9&goto p2
:p3
set/p p3=输入日期      [回车]退出:
if "%p3%" == "" echo 不能为空 &goto p3
if %p3% gtr 31 echo.错误输入&goto p3
if %p3% lss 1 echo.错误输入&goto p3
echo %p3%|findstr "^[0-9]*$">nul&&goto p4||echo 只能是0-9&goto p3
:p4
set jt=你查询的是
cls
goto ymd
11 新年元旦 
22 世界湿地日 
27 国际声援南非日 
210 国际气象节 
212 国际足球比赛日 
214 西方情人节 
31 国际海豹日 
33 全国爱耳日 
38 国际妇女节 
312 植树节 孙中山逝世纪念日 
314 国际警察日 
315 国际消费者权益日 
317 中国国医节 国际航海日 
321 世界森林日 消除种族歧视国际日 
321 世界儿歌日 
322 世界水日 
323 世界气象日 
324 世界防治结核病日 
325 全国中小学生安全教育日 
33 巴勒斯坦国土日 
41 愚人节 全国爱国卫生运动月(四月) 税收宣传月(四月) 
47 世界卫生日 
422 世界地球日 
423 世界图书和版权日 
424 亚非新闻工作者日 
51 国际劳动节 
54 中国五四青年节 
55 碘缺乏病防治日 
58 世界红十字日 
512 国际护士节 
515 国际家庭日 
517 世界电信日 
518 国际博物馆日 
520 全国学生营养日 
523 国际牛奶日 
531 世界无烟日 
61 国际儿童节 
65 世界环境日 
66 全国爱眼日 
617 防治荒漠化和干旱日 
623 国际奥林匹克日 
625 全国土地日 
626 国际反毒品日 
71 中国共产党建党日 世界建筑日 
72 国际体育记者日 
77 中国人民抗日战争纪念日 
711 世界人口日 
730 非洲妇女日 
81 中国建军节 
88 中国男子节(爸爸节) 
815 日本正式宣布无条件投降日 
98 国际扫盲日 国际新闻工作者日 
910 教师节 
914 世界清洁地球日 
916 国际臭氧层保护日 
918 九·一八事变纪念日 
920 国际爱牙日 
927 世界旅游日 
101 国庆节 世界音乐日 国际老人节 
101 国际音乐日 
102 国际和平与民主自由斗争日 
104 世界动物日 
108 全国高血压日 
108 世界视觉日 
109 世界邮政日 万国邮联日 
1010 辛亥革命纪念日 世界精神卫生日 
1013 世界保健日 国际教师节 
1014 世界标准日 
1015 国际盲人节(白手杖节) 
1016 世界粮食日 
1017 世界消除贫困日 
1022 世界传统医药日 
1024 联合国日 世界发展信息日 
1031 世界勤俭日 
117 十月社会主义革命纪念日 
118 中国记者日 
119 全国消防安全宣传教育日 
1110 世界青年节 
1111 国际科学与和平周 (本日所属的一周) 
1112 孙中山诞辰纪念日 
1114 世界糖尿病日 
1117 国际大学生节 世界学生节 
1121 世界问候日 世界电视日 
1129 国际声援巴勒斯坦人民国际日 
121 世界艾滋病日 
123 世界残疾人日 
125 国际经济和社会发展志愿人员日 
128 国际儿童电视日 
129 世界足球日 
1210 世界人权日 
1212 西安事变纪念日 
1213 南京大屠杀(1937年)纪念日! 紧记血泪史! 
1221 国际篮球日 
1224 平安夜 
1225 圣诞节 
1229 国际生物多样性日




简单!简单!再简单!
2008-2-20 19:16
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xmi
初级用户





积分 125
发帖 56
注册 2008-2-20
状态 离线
『第 8 楼』:  

這個可以了... 利害....


2008-2-22 00:58
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: