核心源码

:: 月历查询工具 最初发表于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=

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!

set /a "wm=(%%i+1)%%7"

if !wm! equ 0 echo.&echo.&set /p=

)

echo.

echo ━━━━━━━━━━━━━━━━━━━

echo. 输入日期可查询当日星期并显示当月月历

echo.

set sdate=

set /p sdate= 格式如:2007-02-03,[回车]退出:

if defined sdate goto Main

以下是各计算部分算法:

计算星期:

基姆拉尔森计算公式

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

在公式中d表示日期中的日数+1,m表示月份数,y表示年数。

注意:在公式中有个与其他公式不同的地方:

把一月和二月看成是上一年的十三月和十四月,

例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

生肖及干支年计算方法是:

出生公元年数÷12,然后根据除得的商的余数,对照生肖排列就马上可以知道。

生肖排列是:猴(0)、鸡(1)、狗(2)、猪(3)、鼠(4)、牛(5)、虎(6)、兔(7)、龙(8)、蛇(9)、马(10)、羊(11)。

天干地支算法:

首先要能记住十大天干和十二地支,

十天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸;

十二地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥;

天干地支纪年法首先是天干在前,地支在后,比如今年2005就为-乙酉年,先来算算天干,有个公式:

4、 5、 6、 7、 8、 9、 0、 1、 2、 3 对应的十天干就是

甲、乙、丙、丁、戊、己、庚、辛、壬、癸,

数字为年代的最后的一位数字,比如今年是2005,最后一位是5,对应的天干就是乙;

地支的算法:用年代数除以12,后面的余数就代表某个地支,余数分别为:

4、 5、 6、 7、 8、 9、 10、 11、 0、 1、 2、 3,

代表地支为:子、丑、寅、卯、辰、巳、午、 未、 申、酉、戌、亥,

比如2005年为例:年代末尾数为5,对应的天干为乙,2005除以12,余数为1,对应的地支为酉,所以2005年为乙酉年。

农历日期部分的算法是:

阴历日期是以月亮的圆缺为计月单位,其以逢朔为初一,以月望为十五(大月为十六日),以月晦为二十 九日(大月为三十日)。然而目前记时通常用阳历日期表达,如欲将阳历日期换算成阴历日期可以用以下两种方法:其一是查《新编万年历》,如查1984年6月8日是阴历几日?翻开万年历6月10日是阴历十一,则逆推6月8日是阴历初九。其二可以利用公式推算阴历日期:

设:公元年数-1977(或1901)=4Q+R

则:阴历日期=14Q+10.6(R+1)+年内日期序数-29.5n

(注:式中Q、R、n均为自然数,R<4)

例:1994年5月7日的阴历日期为:

1994-1977=17=4×4+1

故:Q=4,R=1 则:5月7日的阴历日期为:

14×4+10.6(1+1)+(31+28+31+30+7)-29.5n

=204.2- 29.5n

然后用29.5去除204.2得商数6......27.2,6即是n值,余数27即是阴历二十七日。

到此这篇关于批处理万年历实现代码(包括农历日期)的文章就介绍到这了,更多相关批处理万年历内容请搜索随便开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持随便开发网!

python万年历差农历程序_批处理万年历实现代码(包括农历日期)相关推荐

  1. 智慧车行预约小程序,汽车保养、维修、美容、检测预测小程序,前后端完整代码包括车行动态,养车常识,保养预约,维修预约,洗车美容预约

    功能介绍 智慧车行小程序,是一个专门为洗车/4S/车辆维修行业打造的小程序,前后端完整代码包括车行动态,养车常识,保养预约,维修预约,洗车美容预约,汽车检测预约等功能,采用腾讯提供的小程序云开发解决方 ...

  2. python怎么开发安卓程序_怎样用python开发安卓app-到底如何使用Python开发Android程序.txt...

    Python是一种动态语言,是比较简单的. Android不直接支持使用Python开发的应用程序,它需要使用它的中间件或数据库.它提供了在Android平台上的Python语言的支持; Python ...

  3. python数码管倒计时程序_树莓派Python编程用1位数码管显示数字倒计时

    用1位数码管显示数字倒计时 概述 上一篇 我们学习了使用 PWM 来控制 LED 的亮度,这次我们学习使用1位数码管显示个位数字倒计时. 通过本节课,我们能学习到: 1位数码管的显示原理 所需硬件 树 ...

  4. 学完python写不出程序_我又不当程序员,为什么要学Python编程?

    记得刚毕业时,所受的第一场职场教育便是: 职场如战场,战场上只论功劳,不论苦劳. 回想起那时,无数个夜晚披星戴月加班加点,却常常被狠批在做无用功,迷茫与崩溃说来就来,甚至会觉得 " 越努力越 ...

  5. python语音控制电脑程序_用Python编程实现语音控制电脑_天津SEO

    天津SEO 电脑面前的你,是否也希望能让电脑听命于你? 当你累的时候,只需说一声"我累了",电脑就会放着优雅的轻音乐来让你放松. 或许你希望你在百忙之中,能让电脑郎读最新的NBA比 ...

  6. python万年历差农历程序_公历转农历的python实现

    1 #lunar.py 2 # 2015/02/27 罗兵 3 importdatetime4 5 classLunar(object):6 #**************************** ...

  7. python自动卸载win程序_朋友说:能不能用python,帮我写一个“制作工资条”的自动化程序...

    本文说明 今天和一个朋友吃饭,她说我经常使用Excel制作工资条,但是每个月都要做一遍,你能不能用python写一个代码,能够自动化完成这个工作.这当然可以啦,就是这么牛逼! 我们先来看看原始数据是什 ...

  8. python怎么做软件程序_看 Python 超级程序员使用什么开发工具

    Python超级程序员使用的开发工具 我以个人的身份采访了几个顶尖的Python程序员,问了他们以下5个简单的问题: 当前你的主要开发任务是什么? 你在项目中使用的电脑是怎样的? 你使用什么IDE开发 ...

  9. 苹果笔记本python开发第一个程序_第一个Python程序【文章来自老男孩】

    首先我们打开python 交互式解释器, 执行如下命令: Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3.1 20160330] on ...

  10. 万年历c语言程序课设,万年历C语言程序设计.pdf

    沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:C语言课程设计 课程设计题目:万年历软件设计 学 院:计算机学院 专 业:计算机科学与技术 班 级: 学 号: 姓 名: 指导教师:从丽晖 起止 ...

最新文章

  1. hadoop快速入门之DKH安装准备
  2. ecshop_v2.7.3下载地址
  3. 文巾解题 13. 罗马数字转整数
  4. Kafka设计解析(五):Kafka Benchmark--转
  5. (MoMoCMS教程11)页面的SEO优化与外链
  6. 高精度倾斜摄影建模解决方案
  7. 前端学习(3011):vue+element今日头条管理--关于编辑器代码段
  8. 记录请求的耗时(拦截器、过滤器、aspect)
  9. 关于硬盘运行在不同模式下的疑难解答
  10. 有关ElasticSearch的基本概念
  11. 自动驾驶汽车寿命只有四年?
  12. HTML中td元素的nowrap属性
  13. 【人脸识别】基于matlab GUI FISHER人脸识别【含Matlab源码 605期】
  14. 简单java数组程序_最简单易懂的java数组排序方法整理
  15. 浅谈严格控制普通高等学校招生规模
  16. 华为er路由器设置虚拟服务器,华为AR111-S路由器双线路策略路由配置笔记
  17. CC26x2R1笔记(8)CCS9.2 cc26xx环境的搭建
  18. Spark综合项目:企业电商分析平台
  19. python怎样遍历列表中数字_Python基础-列表操作(2):列表的遍历和数字列表
  20. zookeeper集群节点个数为什么最好是2n+1

热门文章

  1. 【独家】这两个人的对决,决定了万科股权大战的走向
  2. 2021 编程语言排行榜出炉!
  3. 计算机二级msoffice高级应用代码,计算机等级考试二级
  4. 软件开发中的时区问题
  5. java判断闰年中闰月_2019年农历闰几月 关于闰年闰月的认识
  6. Job for network.service failed because the control process exited with error code. See “systemctl st
  7. Spring Validation 验证框架全面总结
  8. 平均值、方差、标准差
  9. php获取steam装备信息,api – 获取某人的Steam库存
  10. 解决base64解码乱码问题