『楼 主』:
也发一个农历的时间
论坛已经有了 但还是发了 当作学习
发现有闰几月都显示闰的问题 修正一下
@echo off&setlocal enabledelayedexpansion&color 0b&mode con cols=45 lines=30&title 农历版
set jt=今天是
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
)
:ymd
set/a input=p1-1899
call :ermd
if %nlstr:~4,1% equ 0 goto lp
set/a ern=12-%nlstr:~4,1%
set erstr=!erstr:~0,%nlstr:~4,1%!%nlstr:~0,1%!!erstr:~-%ern%!
:lp
set rnl=%nlstr:~4,1%&&set/a rynl=rnl+1
set 1=30&set 0=29
if defined erstr (
set ntest=%ntest% !%erstr:~0,1%!
set erstr=%erstr:~1%
goto lp
)
set np2=1
set np3=1
set nltt=0
:ppp
if %np2% geq %p2% goto nlppp
if %np2% lss %p2% (
set/a PN2="^!(p1%%4) & ^!(^!(p1%%100)) | ^!(p1%%400)",PN2=28+PN2
for /f "tokens=%np2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do (
set pt=%%i
set/a nltt=nltt+%%i
)
set/a np2+=1&&goto ppp
)
:nlppp
set np1=%p1%
set np2=1
set np3=0
set/a tt=nltt+p3-%nlstr:~-2%
if %tt% gtr 0 goto nextg
set/a tt=%nlstr:~-2%-nltt-p3
set/a input=p1-1900&set rnl=0
call :ermd
set ntest=
set 1=30&set 0=29
:lpn
if defined erstr (
set ntest=%ntest% !%erstr:~0,1%!
set erstr=%erstr:~1%
goto lpn
)
set np3=0
set np2=1
set np1=%p1%
:nextn
set/a np2-=1
if %np2% equ 0 set/a np1-=1&&set np2=12
for /f "tokens=%np2%" %%i in ("%ntest%") do (
set/a np3=np3+%%i
set pt=%%i
)
if %np3% leq %tt% goto nextn
set/a np3=np3-tt
goto :nloop
:nextg
for /f "tokens=%np2%" %%i in ("%ntest%") do (
set/a np3=tt+np3
set pt=%%i
)
if %np3% leq %pt% goto nloop
set/a np3=np3-pt
set tt=0&&set/a np2+=1&&goto nextg
goto nloop
:ermd
set "test=04bd830 04ae049 0a57038 054d528 0d26046 0d95034 1655424 056a043 09ad032 055d221 04ae040 0a5b629 0a4d048 0d25036 1d25525 0b54044 0d6a034 0ada222 095b041 1497731 0497050 0a4b038 0b4b527 06a5046 06d4035 1ab5423 02b6043 0957032 052f222 0497040 0656629 0d4a047 0ea5036 06e9525 05ad044 02b6034 186e323 092e041 1c8d730 0c95049 0d4a038 1d8a626 0b55045 056a035 1a5b424 025d043 092d032 0d2b221 0a95040 0b55728 06ca047 0b55036 1535526 04da044 0a5b033 1457323 052b042 0a9a830 0e95048 06aa038 0aea627 0ab5045 04b6035 0aae424 0a57043 0526032 0f26320 0d95039 05b5729 056a047 096d036 04dd526 04ad045 0a4d033 0d4d422 0d25041 0d55830 0b54048 0b6a037 195a627 095b046 049b035 0a97424 0a4b043 0b27a32 06a5050 06d4039 0af4628 0ab6047 0957036 04af526 0497045 064b034 074a322 0ea5040 06b5830 055c049 0ab6037 096d527 092e046 0c96035 0d95423 0d4a042 0da5031 0755221 056a039 0abb728 025d048 092d037 0cab525 0a95044 0b4a033 0baa422 0ad5040 055d930 04ba049 0a5b038 1517627 052b046 0a93035 0795424 06aa042 0ad5031 05b5221 04b6040 0a6e628 0a4e047 0d26036 0ea6525 0d53043 05aa032 076a322 096d041 04bd730 04ad049 0a4d038 1d0b627 0d25045 0d52034 0dd4523 0b5a042 056d031 055b221 049b040 0a57729 0a4b047 0aa5036 1b25525 06d2044 0ada032 14b6322"
:next
if %input% gtr 31 (
for /f "tokens=31*" %%a in ("%test%") do set test=%%b
set/a input-=31
if %input% gtr 31 goto next
)
for /f "tokens=%input%" %%a in ("%test%") do set nlstr=%%a
set 1=0001&set 2=0010&set 3=0011&set 4=0100&set 5=0101&set 6=0110&set 7=0111&set 8=1000
set 9=1001&set a=1010&set b=1011&set c=1100&set d=1101&set e=1110&set f=1111&set 0=0000
set erstr=!%nlstr:~0,1%!!%nlstr:~1,1%!!%nlstr:~2,1%!!%nlstr:~3,1%!
set erstr=%erstr:~-12%
goto :eof
:nloop
if %rnl% neq 0 (
if %np2% equ %rynl% set ry=闰
if %np2% gtr %rnl% set/a np2-=1
)
set str0=十一二三四五六七八九拾
if %np2% lss 10 (set nlp2=!str0:~%np2%,1!月) else (set nlp2=十!str0:~%np2:~-1%,1!月&set nlp2=!nlp2:十十=十!)
if %np3% lss 11 set nlp3=初!str0:~%np3:~-1%,1!
if %np3% gtr 10 if %np3% lss 20 set nlp3=十!str0:~%np3:~-1%,1!
if %np3% gtr 19 if %np3% lss 30 set nlp3=廿!str0:~%np3:~-1%,1!
if %np3% gtr 29 set nlp3=三!str0:~%np3:~-1%,1!
if %np2% equ 1 set nlp2=正月
if %np2% equ 12 set nlp2=腊月
if not "%ry%" == "" set nlp2=%ry%%nlp2%
set y=%p1%
set m=%p2%
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
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-3*" %%i in ('more/e +180^< %~f0') do (
if "%%i"=="%p2%%p3%" set nu=%%j
if "%%k"=="%np2%%np3%" set nnu=%%l
)
set sx=猴鸡狗猪鼠牛虎兔龙蛇马羊
set tg=庚辛壬癸甲乙丙丁戊己
set dz=申酉戌亥子丑寅卯辰巳午未
set /a num1=np1%%12
set /a num2=%np1:~-1%
echo.
echo. 农历!tg:~%num2%,1!!dz:~%num1%,1!年 %nlp2% %nlp3% [!sx:~%num1%,1!] 年
echo.
echo. %jt%:%p1%年%p2%月%p3%日 %nnu% 星期!xq:~%w%,1!
echo.
echo. %mn% %nu%
echo.
echo.
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 rnl nlp2 nlp3 np1 test ntest tt pt nnu ry erstr) 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)&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 新年元旦 11 春节
22 世界湿地日 115 元宵节
27 国际声援南非日 22 龙抬头节
210 国际气象节 323 妈祖生辰(天上圣母诞辰)
212 国际足球比赛日 55 端午节
214 西方情人节 77 七七中国情人节
31 国际海豹日 815 中秋节
33 全国爱耳日 99 重阳节
38 国际妇女节 128 腊八节
312 植树节(孙中山逝世纪念日) 1223 灶君(祭灶)节
314 国际警察日 1230 除夕
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-3-2 at 01:56 PM ]
此帖被 +10 点积分 点击查看详情 评分人:【 abcd 】 | 分数: +8 | 时间:2008-2-25 01:56 | 评分人:【 borly 】 | 分数: +2 | 时间:2008-2-25 20:22 |
|
|