代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Shell
】
批处理万年历(包括农历日期)
作者:
foxjl
/ 发布于
2014/1/21
/
913
:: 月历查询工具 最初发表于CN-DOS :: 原创:foxjl 更新:namejm, qzwqzw,foxjl :: 计算农历日期部分思路及算法来自"趣味东" :: 输入的日期格式为:年-月-日(-可以替换为:、/,可以混用) :: 在日历里面,★=当天 :: 支持多种格式的日期输入: :: ① 若只输入一个数,则认为是查询当年月份,自动截取后两位数字查询,★标在1日上; :: ② 若输入两个数,则认为是查询年和月,★标在1日上; :: ③ 输全的话,★标在指定日期上 :: 关于年份的转换: :: ① 若年份上输入的数字少于三位,则作如下转换: :: 50~99判定为19xx :: 0~49判定为20xx :: ② 若输入的年份数字超过两位,则截取后四位字符(不足部分在高位补0), :: 按 ① 的规则计算该年份的日期; :: 07-08-04 增加针对阳历的生肖及干支年计算;修改错误日期循环提示的BUG. :: 08-01-13 增加推算农历日期的功能,会有一天左右误差。 @echo off color 1f mode con cols=40 lines=20 setlocal enabledelayedexpansion set str=日一二三四五六七八九 set sdate=%date% :Main cls&echo. :: 日期提取、格式化与校验 for /f "tokens=1,2,3 delims=-/: " %%i in ("%sdate%") do ( (set sy=%%i) && (set sm=%%j) && (set sd=%%k) ) if not defined sd set sd=1 if not defined sm set sm=%sy%&set sy=%date:~0,4% (set sy=0000%sy%) && (set sm=00%sm%) && (set sd=00%sd%) (set sy=%sy:~-4%) && (set sm=%sm:~-2%) && (set sd=%sd:~-2%) set /a y=1%sy%-10000, m=1%sm%-100, d=1%sd%-100 2>nul if errorlevel 9167 goto Error if %y% lss 100 ( if %y% lss 50 (set /a y+=2000) else (set /a y+=1900) set sy=!y! ) if %m% lss 13 if %d% lss 32 goto Calc :Error echo.错误的日期. pause>nul cd. set sdate=%date% goto Main :Calc ::计算农历部分 set/a Q=(y-1901)/4 set/a R=y-1901-4*Q set n=0 for %%i in (0,31,59,90,120,151,181,212,243,273,304,334) do ( set /a n+=1 if %m% equ !n! set z=%%i) set /a leap="^!(y%%4) & ^!(^!(y%%100)) | ^!(y%%400)" if %m% gtr 2 (if %leap% equ 0 (set /a z-=1) else (set /a z+=leap)) set/a n=(140*Q+106*(R+1)+z*10+d*10)/295,H=(140*Q+106*(R+1)+z*10+d*10-295*n)/10 if %h% equ 0 set h=29 if %h% leq 10 (if %h% equ 10 (set h=初十) else (set h=初%h%)) else (set h=%h:~0,1%十%h:~-1%号) for /l %%i in (1,1,9) do (call set h=%%h:%%i=!str:~%%i,1!%%) set h=%h:0=% :: 计算生肖及干支年 set sx=猴鸡狗猪鼠牛虎兔龙蛇马羊 set tg=庚辛壬癸甲乙丙丁戊己 set dz=申酉戌亥子丑寅卯辰巳午未 set /a sxnum=%sy% %% 12 set /a tgnum=%sy:~-1% title 农历!tg:~%tgnum%,1!!dz:~%sxnum%,1!年 生肖:!sx:~%sxnum%,1! 农历:%h% :: 计算每个月的天数 set days=31 for %%i in (4 6 9 11) do if %m% equ %%i set days=30 :: 计算2月份的偏差 set /a leap="^!(y%%4) & ^!(^!(y%%100)) | ^!(y%%400)" if %m% equ 2 set /a days=28+%leap% if %m% leq 2 (set /a y-=1& set /a m+=12) :: 计算指定日期的星期数 set /a w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%%7 echo. %sy%年%sm%月 日期:%sy%-%sm%-%sd%,星期!str:~%w%,1! echo. :: 生成月历 set /a wb=(w+35-d) %% 7, we=wb+days+1, day=1 echo. 日 一 二 三 四 五 六 echo. ━━━━━━━━━━━━━━━━━━━ set /p= <nul for /l %%i in (0,1,37) do ( set "temp= " if %%i GTR %wb% if %%i LSS %we% ( set temp= !day! set temp=!temp:~-2! if !d! 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 ━━━━━━━━━━━━━━━━━━━ echo. 输入日期可查询当日星期并显示当月月历 echo. set sdate= set /p sdate= 格式如:2007-02-03,[回车]退出: if defined sdate goto Main
试试其它关键字
批处理万年历
同语言下
.
判断用户输入的是否为IP地址
.
根据web访问日志,封禁请求量异常的IP,如IP在半小时
.
iptables自动屏蔽访问网站频繁的IP
.
批量修改服务器用户密码
.
监控httpd的进程数,根据监控情况做相应处理
.
创建10个用户,并分别设置密码,密码要求10位且包含大
.
Expect实现SSH免交互执行命令
.
输入数字运行相应命令
.
用shell打印示例语句中字母数小于6的单词
.
扫描主机端口状态
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
foxjl
贡献的其它代码
(
1
)
.
批处理万年历(包括农历日期)
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3