公历转农历

公历转农历为方便叙述,首先介绍两个函数高斯函数:f(x)=[x],[x]表示不超过数x的最大整数,那么对数x进行取整有三种方法:用高斯函数分别表示为去尾法取整f(x)=[x];进一法取整f(x)=-[-x];四舍五入法取整f(x)=[x+0.5].求余数函数:f(x)=xmodt,表示x除以t后所得的余数(即mod表示余数运算)且被除数x=除数t*商+余数,所以有x=t*[x/t]+xmodt如果以某年的1月1日为这一年第1天,那么这一年2月1日就是第32天……如果设月份数为m,日期数为d,求m月d日是这一年的第几天(即这一天的序数),这也容易算出,但能否给出个公式,把m,d代入公式直接求出序数g(m,d)呢?下面来推导这个公式:要求出序数g(m,d)只需把日期d加上这个月之前各月天数的总和g(m)即可,比如说求1月份某日序数,把日期加0即可,求2月份某日序数,把日期加31即可……容易得出平年和闰年的1-12月份的月前天数总和g(m)分别是:月份``m`,1,`2,`3,`4,``5,``6,``7,``8,``9,`10,`11,`12。

平年g(m),0,31,59,90,120,151,181,212,243,273,304,334。

闰年g(m),0,31,60,91,121,152,182,213,244,274,305,335。

下面来求这个月前天数总和g(m)的表达式,假设(1)如果一年中的每个月都是30天,很容易得出月前天数总和g(m)为30m-30,假设(2)如果一年中的单月都是31天,双月都是30天,月前天数总和比假设(1)每个双月多一天,在假设(1)基础加[m/2],(即对m/2取整)即可以得出这种情况下g(m)为30m+[m/2]-30,假设(3)如果一年中8月以前的单月都是31天,双月都是30天,并且8月及其以后的单月都是30天,双月都是31天,月前天数总和比假设(2)中9月份及其以后每个月多一天,在假设(2)基础加[m/9],即可以得出这种情况下g(m)为30m+[m/2]+[m/9]-30,假设(3)跟实际情况已经很接近了,只差2月份的天数不同,先考虑平年时的情况,2月份是28天,比假设(3)中少两天,所以当m=1,2时g(m)为30m+[m/2]+[m/9]-30,当m≥3时,g(m)为30m+[m/2]+[m/9]-30-2=30m+[m/2]+[m/9]-32,可以用式子[2/m]和[1/m]把m=1,2时的情况化到上式当中,即得平g(m)=30m+[m/2]+[m/9]-32+([2/m]-[1/m])*2,由此还可得闰年时闰g(m)=30m+[m/2]+[m/9]-31+([2/m]-[1/m]),设年份数为y,所以这个g(m)的统一式还和y有关。

前面已定义f(x)=xmodt表示x除以t后所得的余数,则闰年的条件可以这样来表述:已知当ymod4=0且ymod100≠0或ymod400=0时,y年才为闰年,由开篇介绍可知对(ymodt)/t用进一法取整表达式为-[-(ymodt)/t],其含义为当ymodt=0时,-[-(ymodt)/t]=0;当ymodt≠0时,-[-(ymodt)/t]=1,再由开篇x=t*[x/t]+xmodt可得-[-(ymodt)/t]=-[[y/t]-y/t],令m(y)=-[[y/4]-y/4]+[[y/100]-y/100]-[[y/400]-y/400],那么可以得出当y年是闰年时,m(y)=0,当y年不是闰年时,m(y)=1,以上几式都可以用讨论的方法加以证明,证明从略。

将m(y)应用到上面的g(m)式中,可以得到g(m)的统一式:g(m)=30m+[m/2]+[m/9]-31-m(y)+([2/m]-[1/m])*(1+m(y)),所以g(m,d)=g(m)+d=30m+[m/2]+[m/9]-31-m(y)+([2/m]-[1/m])*(1+m(y))+d。

假设从公元前一年到现在的历法都是现行历法(格里高利历法),即公历置闰方法未变,都是4年一闰且100年不闰400年又闰,实际没有公元0年,现在假设有公元0年,并把公元0年1月1日设为第1天(序数为1),那么公元1年1月1日就是第367天(序数为367)……但能否给出个公式g(y,m,d),把y,m,d代入公式直接求y年m月d日这一天的序数呢?下面来推导这个公式:要求出序数g(y,m,d)只需把g(m,d)加上这一年之前的天数总和g(y),假设(1)如果每年都是365天,很容易得出某一年之前的天数总和g(y)为365y,假设(2)如果每4年一闰,即每4k+1的年份的序数都比假设(1)多一天,由此可以得出g(y)为365y+[(y-1)/4]+1=365y+[y/4]-[[y/4]-y/4][(y-1)/4]+1=[y/4]-[[y/4]-y/4]可以用讨论的方法加以证明由此可以得到g(y)的表达式为g(y)=365y+[y/4]-[[y/4]-y/4]-[y/100]+[[y/100]-y/100]+[y/400]-[[y/400]-y/400],上面有m(y)=-[[y/4]-y/4]+[[y/100]-y/100]-[[y/400]-y/400],所以g(y)=365y+[y/4]-[y/100]+[y/400]+m(y),g(y,m,d)=365y+[y/4]-[y/100]+[y/400]+m(y)+g(m)+d,g(y,m,d)=365y+[y/4]-[y/100]+[y/400]+30m+[m/2]+[m/9]-31+([2/m]-[1/m])*(1+m(y))+d。

根据这个式子很容易求出任意两天之间相差的天数是多少,即分别求出两天的序数之后作差即可。

为方便计算,下面来化简这个式子设公元y年m月d日(y≥1582且y+m/10≥1583且y+m+d/15≥1593,1≤m≤12)设公元y年年份的末两位数为b(b=y-[y/100]),年份去掉末两位数后剩下的数为a(a=[y/100]),即有y=100a+b。

设f(y)=365y+[y/4]-[y/100]+[y/400],将y=100a+b代入式中得f(y)=36500a+365b+[25a+b/4]-[a+b/100]+[a/4+b/400]b为年份的末两位数,所以0≤b<100,所以[b/100]=0,b/400<1/4,用讨论的方法(设a=4k+0,1,2,3)可以证明[a/4+b/400]=[a/4],所以f(y)=36500a+365b+25a+[b/4]-a+[a/4],f(y)=36524a+[a/4]+365b+[b/4],所以g(y,m,d)=36524a+[a/4]+365b+[b/4]+30m+[m/2]+[m/9]-31+([2/m]-[1/m])*(1+m(y))+d。

设f(m)=30m+[m/2]+[m/9]+([2/m]-[1/m])*(1+m(y))+ε,(ε为一待定常数项)设f(y,m,d)=f(y)+f(m)+d,则f(y,m,d)=36524a+[a/4]+365b+[b/4]+30m+[m/2]+[m/9]+([2/m]-[1/m])*(1+m(y))+ε+d,则f(y,m,d)就是公元y年m月d日一个相对的序数,如果以某个历法周期p为模(除数),对进行求余数运算就可以求出某一天的是这个周期的哪一天了,(1)如果以7为模,就可以求某一天星期几,f(y,m,d)≡36524a+[a/4]+365b+[b/4]+f(m)+d(mod7),≡5a+[a/4]+b+[b/4]+2m+[m/2]+[m/9]+([2/m]-[1/m])*(1+m(y))+ε+d(mod7),然后对照历书就可以得出ε的值,在这里f(m)是以公式的形式给出的,如果能直接记住每个月f(m)(mod7)的值,会使计算更加快捷的,总之记的数据越多,算起来越快。

(2)如果以60为模,就可以求公历某年某月某日的干支序数,f(y,m,d)≡36524a+[a/4]+365b+[b/4]+f(m)+d(mod60),f(y,m,d)≡44a+[a/4]+5b+[b/4]+f(m)+d(mod60),f(y,m,d)≡4*((11*(amod15))mod15)+[a/4]+5*bmod12+[b/4]+f(m)+d(mod60),1-12月对应的f(m)的余数分别对应10,41,9,40,10,41,11,42,13,43,14,44;闰年的1,2月份要减去1,最后求出的结果1-59分别对应干支甲子-壬戌,0对应癸亥,即求出的结果用10除求余数,余数为0-9时分别对应天干:癸甲乙丙丁戊己庚辛壬,求出的结果用12除求余数,余数为0-11时分别对应地支:亥子丑寅卯辰巳午未申酉戌亥,当a=19时,44a+[a/4]≡0(mod60);当a=20时,44a+[a/4]≡45(mod60);记住世纪的余数0和45就能很快算出上下100年某天的干支了,如1949年10月1日干支序数为0+5*49mod12+[49/4]+43+1≡5+12+43+1≡61≡1(mod60),所以新中国成立的这一天是甲子日!再如2006年10月1日干支序数为45+5*6+[6/4]+43+1≡15+1+43+1≡0(mod60),所以这一天是癸亥日,也可以不用60作模,而分别用10和12作模对f(y,m,d)求余数,需要计算两次才能求出干支,不知道这两种算法哪一种快,我还没有比较过。

(3)如果以28为模,就可以求某日对应的廿八宿,当然廿八宿也可以根据星期和干支用中国剩余定理算出来。

(4)如果以29.5306为模,则可以比较精确的估计出公历某年某月某日的农历日期,f(y,m,d)≡36524a+[a/4]+365b+[b/4]+f(m)+d(mod29.5306),≡[a/4]-5.3522a+10.6328b+[b/4]+0.4694m+[m/2]+[m/9]+([2/m]-[1/m])*(1+m(y))+ε+d(mod29.5306)据说目前还没有把公历转换成农历的公式,我想上面这个公式应该算是把公历转换成农历的公式了,如果把ε取一恰当的值,再把所得的结果四舍五入,也许会得到农历日期的精确值,这需要计算来验证,粗略算了一下,2000年的ε值在6.0134和6.0746之间,如果得不到农历日期的精确值,我猜想ε对于每年都是不同的值,并且ε是年份y的函数,如果也不成立的话,就需要换成更精确的周期29.53058867+0.0000000019(y-1900)来支持了,计算起来更为麻烦,不过用计算机算起来也许很快,只是我不会编程,暂时没法验证。

另外,对于儒略历y年m月d日,有8≤y≤1582且y+m/10≤1583且y+m+d/4≤1593,此时f(m)=30m+[m/2]+[m/9]+ε+([2/m]-[1/m])*(1-[[y/4]-y/4]),(ε为一待定常数项)f(y)=36525a+365b+[b/4],设f(y,m,d)=f(y)+f(m)+d,则f(y,m,d)=36525a+365b+[b/4]+30m+[m/2]+[m/9]+([2/m]-[1/m])*(1-[[y/4]-y/4])+ε+d,则f(y,m,d)就是公元y年m月d日一个相对的序数,应用这个式子可以计算儒略历时的星期和干支等数据,不再赘述。

THE END
1.中国农历年份,rpa,机器人,自动化路人甲中国农历公历转换 阴阳历换算 万年历 农历是我国古代用以指导农业生产生活的传统历法,自夏朝始,称为夏历。 农历属于一种阴阳历,是以月球绕地球一周为一月,十二月为一年,月亮号为太阴,故谓之太阴历,简称 rpatu更多内容请查看https://passer-by.com/calendar/ https://wdlinux.cn/html/zonghe/20241128/20015.html
2.用C#编写19002100年阴历阳历转换程序本人在学习C#编程的过程中,通过使用天文台公布的1900-2100年阴历大小月数据,参考网站大神的案例,将其内置入程序中。运行程序,即可查询1900至2100年间任意一天的农历及干支。输入8位日期如“20240801”即可查询,如直接输入1900至2100间的4位年份数字,则显示当年一年的公历农历清单对照清单。 https://blog.csdn.net/Aleck6364/article/details/144155038
3.万年历查询日历查询农历查询农历日历老黄历万年历表中华万年历 本机时间2024-12-0223:59:26 2024-12-0215:59:26 格林威治标准时间https://qq.ip138.com/day/
4.国历和农历怎么转换6、国历与农历的换算公式 求教高人!!! 你指的是公历与农历的换算公式吧?这个算法复杂,我可以提供C或C++的API函数给你,不知道你是用什么语言来编的? 7、转换农历国历 网友分享:你好,国历1997.13,转换为农历是1997年1月7日,星星期四;国历1997.1,转换为农历是1996年12月24日,星期六。 https://www.105188.com/sh/618011.html
5.身份证农历日期计算法生日揭秘农历转换身份证10月12日对应的农历日期,揭秘农历生日计算法_身份证 农历日期 计算法 生日揭秘 农历转换_易学品鉴http://m.emotion123456.com/tags-62138.html
6.请问R语言如何实现公历日期与农历日期的互相转换或者单向转换提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】 请问有精通R语言的知道怎么实现公历日期与农历日期的转换如何实现吗 谢谢啦,急问! 扫码或添加微信号:坛友素质互助 https://bbs.pinggu.org/jg/kaoyankaobo_kaoyan_7677420_1.html
7.公历和农历转换算法详解20220811090641.docxPAGE PAGE 10 公历和农历转换算法详解 //C51写的公历转农历和星期#define uchar unsigned char #define uint unsigned int #include intrins.h /* 公历年对应的农历数据,每年三字节, 格式第一字节BIT7-4 位表示闰月月份,值为 0 为无闰月,BIT3-0 对应农历第 1-4 月的大小第二字节BIT7-0 对应农历第 5-https://max.book118.com/html/2022/0811/6231111230004222.shtm
8.阳历转化成农历法.docx作者:日期: C++中怎样将阳历转化成农历已关闭20[标签:C++,阳历,农历]小A角、2011-05-0311:06推荐答案一、原理篇公历转换农历的算法公历(GregorianCalendar)与农历(ChineseLunarCalendar)的转换关系不是一个简单的公式就可以完成,其中的转换比较复杂,原因是农历的制定相当复杂,是根据天文观测进行指定的。比较常用并且https://m.renrendoc.com/paper/308154963.html
9.免费阴历阳历转换在线工具网(zxgj.cn)阴历阳历转换免费 已经有11.2w+人使用8人评论 HR 在线人才测评系统心理疾病精神疾病筛查人格障碍测试PDQ量表测试你的智商高低 公历转农历,阳历转阴历 请输入公历(阳历)日期 19401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198https://www.zxgj.cn/g/yinyangli
10.一种公历到农历日期转换算法的实现一种公历到农历日期转换算法的实现消耗积分:5 | 格式:rar | 大小:136 | 2009-08-03 分享资料个 关注 本文主要从单片机软件实现角度介绍一种公历到农历转换的算法思想, 算法采用MCS-51 指令系统实现。并给出程序流程图,另外对二十四节气和生肖的算法也做详细介绍。关键词:单片机;MCS-51 指令系统Abstract: https://m.elecfans.com/article/39160.html
11.一种公历到农历日期转换算法的实现郑丽丽谢磊李清宝一种公历到农历日期转换算法的实现 摘要 本文主要从单片机软件实现角度介绍一种公历到农历转换的算法思想,算法采用MCS-51指令系统实现。并给出程序流程图,另外对二十四节气和生肖算法也做详细介绍。 著录项https://www.zhangqiaokeyan.com/academic-journal-cn_microcomputer-information_thesis/0201243212509.html
12.Python实现公历(阳历)转农历(阴历)的方法示例python这篇文章主要介绍了Python实现公历(阳历)转农历(阴历)的方法,涉及农历算法原理及Python日期运算相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现公历(阳历)转农历(阴历)的方法。分享给大家供大家参考,具体如下: 两个要点: 1、公历转农历用了查表法(第126行) https://www.jb51.net/article/121808.htm
13.公历(阳历)日期转换农历(阴历)日期在线计算器输入公历(阳历)日期,点击计算按钮,输出公历(阳历)日期、农历(阴历)、天干地年份、生肖、星座、五行等。http://3158bbs.com/tool-197.html
14.IC卡日期转换软件及算法共6种.rar9.一键修改:自动识别可修改内容,并根据修改内容自动计算校验。 10.校验计算:列举常见的IC卡算法,方便计算。 11.文件对比:自动对比两个文件,并标识不同处。 12.楼层转换:电梯卡中常用的楼层码算法转换。 13.日期转换:列举常见的日期格式,互相转换。 14.数据提取:批量提取密钥及指定区块数据。 https://www.iteye.com/resource/bottle05-12660427
15.根据公历日期计算农历年生肖及公历转换农历的方法办法当然有,一是用VBA转换,二是辅助列做公历与农历对照表转换.今天我就提供对照表转换方法,与EH的E友https://club.excelhome.net/forum.php?mod=viewthread&tid=799794
16.万年历农历查询农历阳历转换阴历转阳历阴阳历转换汉程网万年历农历查询,200年阴阳历转换,将农历阴历和公历阳历相互转换,可以查询农历节气、干支、闰月、纳音、星期,还附有每日宜忌、冲煞等黄历信息。https://life.httpcn.com/nongli.asp
17.公历农历日期转换阴历和阳历因使用历法的不同,导致二者日历并不一致,我们所使用的阴阳历转化工具可以方便转化公历和农历的日期,通过它可以计算出自己出生日的农历日期及生肖属相、星座等 阴历和公历的区别 中国历法是根据月亮和太阳的运动计算的阴阳历。公历是通过太阳的运动来计算的;当地球绕太阳转一圈时,就是一年。一般来说,阴历比https://gregorian-lunar-calendar.bchrt.com/
18.万年历阴阳历转换万年历公历农历转换其二可以利用公式推算阴历日期: 设:公元年数-1977(或1901)=4Q+R 则:阴历日期=14Q+10.6(R+1)+年内日期序数-29.5n (注:式中Q、R、n均为自然数,R 怎样用公历年换算出农历天干地支我国古代是用天干地支来纪年的,现代社会已很少使用。一来现今社会已经离不开国际化,沿用老的历法已经不现实;二来天干地支在https://www.16757.com/ysh/huangli/2745.html
19.阴历阳历转换算法.doc文档介绍:该【阴历阳历转换算法 】是由【Bonnacon】上传分享,文档一共【5】页,该文档可以免费在线阅读,需要了解更多关于【阴历阳历转换算法 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。阴历阳历https://m.taodocs.com/p-802863762.html
20.公历农历日期转换公历农历日期转换 公历转农历农历转公历复制结果清空 转换结果: 转换后的农历日期:2024年10月30日 (十月三十) 甲辰年乙亥月戊戌日 (龙年) Unix时间戳转换 人民币大写转换 颜色选择器转换器 在线支持HEX、RGB、RGBA互转 拾取坐标/坐标转换 支持GCJ-02、WGS84、BD-09转换https://33tool.com/solar2lunar