公历转农历

公历转农历为方便叙述,首先介绍两个函数高斯函数: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.公历农历转换公历农历转换 二十四节气查询 汽车油耗计算 电费计算器 日期差计算 未来时间查询 金银走势 交通标志 常用电话号码 交通违章查询 快递查询 机场三字码查询 全球港口查询 2025放假时间安排表 行政区划查询 统计用产品分类目录 经纬度查询 升降旗时间 倒计时 https://gonglinongli.bmcx.com/
2.Excel教程:公历日期转农历的6个公式有小伙伴在后台留言询问,公历日期如何转为农历日期。 比如,下面的Excel表格,将B列的日期,转成对应的农历。 C2单元格输入公式:=TEXT(B2,"[$-130000]yyyy-m-d"),下拉即可。 公式解释: B2:表示要转化的公历日期; yyyy-m-d:表示输入日期的格式; https://www.360doc.cn/article/18781560_1011334212.html
3.农历阳历转换计算公式理想股票技术论坛指标公式 指标问答 股票软件 实战 涨停 研报 热门 精华 悬赏 技巧 排行 说吧 金钻 自选 选股 驿站 任务 新手 签到 竞猜 帮助农历阳历转换计算公式,农历阳历转换计算公式, 农历转阳历公式, 阳历转农历公式, 日历转换计算 1. 提供农历与阳历之间的转换计算方式。 农历与阳历转换的通达信日期查询系统 [股票软件指标https://www.55188.com/tag-9127653.html
4.根据公历日期计算农历年生肖及公历转换农历的方法公历 农历 1900-1-31 春节 1901-2-19 春节 1902-2-8 春节 1903-1-29 春节 1904-2-16 春节 19https://club.excelhome.net/forum.php?mod=viewthread&tid=799794
5.求WPS公历转农历日期公式=MID("甲乙丙丁戊己庚辛壬癸",MOD(TEXT(A2,"[$-130000]e")-4,10)+1,1)&MID("子丑寅卯https://www.3d66.com/answers/question_1145785.html
6.公历转阴历算法阳历转阴历计算公式公历转阴历算法 简述 阳历和阴历之间是不能换算的,二者采用的计算方法不同,没有特殊关系可以查询,只能分别计算。 公历是阳历的一种,阳历就是以地球绕太阳公转的运动周期为基础而制定的历法。以耶稣诞生之年作为纪年的开始。 阴历,又称太阴历,是以月球绕行地球一周为一个月,即以朔望月作为确定历月的基础的一种历https://blog.csdn.net/qq_41146650/article/details/102876334
7.我的wps表格虽然函数正确为什么不能公历转换阴历格式?两个日期一1. 公历转农历是一个复杂的数学问题,需要用到许多复杂的公式和算法。如果你使用的公历转农历函数在WPShttps://ask.zol.com.cn/x/25138730.html
8.阴历阳历转换计算公式.doc自回历元年元旦至309年元旦,共历113个闰年196个平年。又回历历元在公历622年7月16日,已知该日的干支序数为50,癸丑日,减1(因自甲子起算),余49应加入下列算式中, (309 × 354+113+79+49)÷60= ×60=7 干支序数为7,即庚 阴历阳历转换计算公式 来自淘豆网www.taodocs.com转载请标明出处. https://www.taodocs.com/p-178975276.html
9.儒略日与公历转换儒略日与公历转换 查看原文 日历算法 [ 解读算法的乐趣 ] 计算公式1(多用于格里历):儒略日计算公式2(多用于儒略历): 其中,m、y的公式为 : , , 其中,a的推导公式为: p.s.儒略历是Julius Caesar发明的。一年有12个月,大月判断闰年 星期几儒略日计算蔡勒公式输出12个月份 二十四节气的天文学计算历法,https://www.pianshen.com/article/999417256/
10.公历转农历怎么个计算方法?标题: Re: 公历转农历怎么个计算方法? 发信站: 水木社区 (Mon Nov 20 15:17:00 2023), 站内 “阳历(格里高利历)是算术历,所有的日期都是根据公式计算的”,不正确。 阳历和阴历没有区别,都是用算术法表达自然规律。 你的天、月、年,都是整数数字。这跟自然规律对不上。因为月球、地球的自转、公转http://images.newsmth.net/nForum/article/Programming/211883?p=1&au=ssava
11.公历转农历的四种方法4、;dbnum1$-130000年m月"&IF(-TEXT(A1,"$-130000d")<11,"初","")&TEXT(A1,"dbnum1$-130000d")excel公历转农历方法四:使用自定义函数上面介绍的excel公历转农历都是使用excel内置函数完成的,有一个弊端就是公式太长,如果使用自定义函数,在公式栏就可以简化输入。如下图所示,我们在B2输入公式:=nongli(https://www.renrendoc.com/paper/202504060.html
12.Python实现公历(阳历)转农历(阴历)的方法示例python本文实例讲述了Python实现公历(阳历)转农历(阴历)的方法。分享给大家供大家参考,具体如下: 两个要点: 1、公历转农历用了查表法(第126行) 2、节气用了天文法?(第176行) 运行图(背景是hao123万年历) 源代码: 1 2 3 4 5 6 7 8 9 10 11 https://www.jb51.net/article/121808.htm
13.公历与农历换算公式是什么?公历与农历换算公式是什么? 目前WPS暂时还没有公历转农历的相关功能或者工具,后续会考虑添加~操作设备: 电脑 操作系统: windows 10 操作版本: WPS Office 2019 PC个人版 此内容对你有帮助吗? 有帮助 无帮助 学堂自习室为用户交流问答内容,未经官方精选加工。但海量内容中,不乏一些有价值技巧,仅供各位同学参考学习https://www.wps.cn/learning/room/d/215122
14.Excel公历日期怎么转为农历Excel公历日期转为农历过程今天特地为大家整理了Excel公历日期转为农历过程介绍,希望能够帮助到大家。 Excel公历日期转为农历过程介绍 以下面这个表格为例子,左边是公历,右边是农历。在农历的单元格中填入一下函数公式。=TEXT(A2,"[$-130000]yyyy-m-d") 当中A2表示要转换的公历单元格,yyyy-m-d表示转换日期的格式,而[$-130000]就是农历https://www.jiandaoyun.com/article/post/18060.html
15.excel公历转农历的四种方法excel公历转农历的四种方法 excel公历转农历方法一:使用text函数 A列是公历日期,我们在B1单元格输入公式:=TEXT(A1,“[$-130000]yyyy年m月“&IF(LEN(--TEXT(A1,“[$-130000]dd“))=1,“初“,““)&“d“),下拉完成公历转农历。 excel公历转农历方法二:使用text+MID函数 A列仍然是公历,B1输入公式:=MIDhttps://www.mayiwenku.com/p-7032039.html
16.公历(阳历)日期转换农历(阴历)日期在线计算器输入公历(阳历)日期,点击计算按钮,输出公历(阳历)日期、农历(阴历)、天干地年份、生肖、星座、五行等。http://3158bbs.com/tool-197.html
17.转换农历日期的公式(excel阴历转换公历函数)转换农历日期的公式(excel阴历转换公历函数) 它是Excel Office中的一个表格办公软件。用Excel做报表比用Word做表格方便多了。你不必自己画出每个格子的形状。那么下面小编就教大家如何在Excel中使用函数将公历日期转换成农历。这一步很简单,一点也不难学。https://www.bzx1688.com/g/60831.html