万年历的计算公式
用蔡勒(Zeller)公式
即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)
算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:
蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54 (除以7余5)
即2049年10月1日(100周年国庆)是星期5。
注:以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)
万年历上怎么推算的?
《银盘子》的秘密
万年历是一种将公历、农历、干支历相互对应,编排在一起的历学工具书。查用万年历,主要是使用年历中的干支纪时。
干支纪时是我国独创的历史最悠久的历法。它以天象为依据,符合物候特点,体现了五行旺衰。在诸多学科中,有着其它历法不可替代的作用。干支纪时,在中医、气功、周易数术、农作、历法等领域中:有着特殊的实用价值。每当需用干支纪时,而需用者手中没有万年历的时候,往往束手无策。
,只需记住十四字的歌诀,一年中的干支纪时就可迅速算出。这种快速心算万年历的方法,叫“银盘子”,“银盘子”是民间术士创造的万年历速算法,历史悠久,以往采用师徒间口授方法传授,严禁外传,我们在此将“银盘子”合盘端出,公诸於世,以进一步探讨揭秘。
“银盘子”是以农历为基础,推算干支纪时的方法。
农历有大月、小月之分,大月30天,小月29天。如果不考虑小月因素,农历两个月60天,与一个甲子六十组干支数目相符,即每两个月可重合一个甲子。按照这样一个规律,知道了某年的正月初一的日干支,就等于知道了三月初一,五月初一,七月初一,九月初一,十一月初一的日干支,这几个月的初一的日干支,应是相同的(有闰月者,月分稍有变化)因为农历中存在小月,只要知道某年有几个小月,其分别为哪几个月,所推日期经历了几个小月,干支纪日顺延几天就是了,这样心算干支纪日就变得十分简单了。
心算万年历,必须了解以下四个要点:。 (1)该年岁次;(2)正月初一的日干支;(3)立春的日、时;(4)当年几个小月,分别为哪几个月。
“银盘子”仅用了十四个字的歌诀,便将以上四个问题圆满地解决了。“银盘子”的创造者,为了保守秘密,在编制口诀时,采用了“加密术”,即对同一地支,往往采用多种称谓。这样做,一是提供了多一些的音韵,使编出的歌诀押韵。而更主要的是为这种心算法采取了“加密”。同一地支众多称谓,变换使用,即便外人听到也不得其解。
“银盘子”不但对地支称谓进行了加密处理,为了便于记忆,控制歌诀字数,还设置了一些相关月份的简称。月时,可称“金蝉”。另外遇到闰月,分别以前、后、双表示。如后五,指闰五月,前三,指前三月,双七指前、后两个七月。
发现节气与农历月之间,有一定规律可以进行修正,只要加上相应的修正值,从立春节即可推算全年任何一个节气的交节日期。大部分节气不差一个时辰。个别节气在推算中会有几个时辰的误差,但用心算法达到这样的精度,已经完全可以满足实用要求了。古人曾规定了一个修正数,不甚精确,笔者经过慎密演算,重新确定了修正值,歌诀是:
立春时刻起根源,
惊蛰倒退时辰三,
要知清明三月节,
不用加减做龙坛。
加八时辰是立夏,
二日退一芒种天,
三日四时为小暑,
五天秋到衣食干。
五日十时交白露,
六日五时寒露天,
六日七时立冬节,
六日四时大雪连。
五日九时交小寒,
推算不会差半天。
以上是从立春节时间起计算不同节气,需要加上有不同时间修正值。了解了由立春起,推算十二节气时修正值,再根据“银盘于”歌,即可算出一年中的任何一个节气的交节时间,知道了交节时间,就能确定干支纪月的起始。
试以1957年为例,推算立冬时间,确定干支纪月。
“银盘子”歌诀曰:“丁酉癸卯初五蛇,木局后刀四申丑上查”。“银盘子”所表达的意思为:1957年岁次丁酉,正月初一的日干支是癸卯,正月初五巳时立春。十月、二月、六月、闰八月、四月、七月、腊月为小月,该年闰八月。
立冬节为十月节,因该年闰八月,所以立冬节在阴历九月中,该年正月初五立春,设九个月后的初五(即九月初五)立冬。立冬前经历了五个小月(小月29日,干支月约30日),先补上五日,再加上修正值六日七个时辰,即为立冬时间。
立冬日期为:九月初五巳时+(五日) +(六日七个时辰)=九月十七日子。
根据“五虎遁”规定,干支月为辛亥月。再以1938年为例,推算芒种节时间,确定干支纪月。
“银盘于”歌诀曰:“戊寅癸亥初五戌,印酉龙羊闰前七”。
“银盘子”所表达的意思为:1938年岁,次戊寅,正月初一日干支为癸亥,该年正月初五戌时立春。该年四月、八月、三月、六月、前七月、十一月为小月,是年闰七月。
芒种节为五月节。芒种经历了三月、四月两个小月,修正值为二日退一时辰。正月初五立春,设五月初五为芒种节。芒种节交节时间为:五月初五戌时+(两日)+(两日-1时辰)=五月初九酉时。根据“五虎遁”规定:干支月为戊午月。
“银盘子”是中国先人在社会实践中创造出来的心算万年历法。只要将六十甲子热练掌握,用心记住十四个字,即可推算出一年之历法。记住数百个字(几十个歌诀)就可推算数十年的历法.可以说学会此法,即胸有历书,很有实用价值。现在我们大力提倡学术交流’,不搞门户之见,完全可以去掉“银盘子”的加密做法,重新编制歌诀,使之更简明、易记,让更多的人掌握心算万年历法,使这种隐匿在民间的秘术服务于社会。
注;本文银盘子古歌诀由山东肥城栾昌明老先生提供。
速算干支年历歌诀新编
(1941—2000)
41. 辛巳乙亥初九马 前六金蝉龙猴打
42. 壬午黄猪十九鸡 二五九月十一七
43. 癸未甲午当日鼠 正三八十腊月五
44. 甲申戊子十二卯 前四二五猴猪咬
45. 乙酉癸丑廿二午 正二四五猴与鼠
46. 丙戌丁未初三鸡 二三五六八鼠息
47. 丁女辛丑十四夜 后二三五六八亥
48. 戊子乙丑廿六卯 玉兰七九子上找
49. 已丑黄羊初七马 二五九鼠七月俩
50. 庚寅癸未十八酉 正四七八猪与牛
51. 辛卯丁丑廿八夜 二五七九与子月
52. 壬辰黑猴初十虎 正三六九子前五
53. 癸巳丙申廿一蛇 正三四七十腊查
54. 甲午庚寅初二申 二四五七十月真
55. 乙未青鸡十二亥 火局前三七蛇在
56. 丙申己酉廿四虎 正三五六八与猪
57. 丁酉癸卯初五蛇 玉兰后八七十腊
58. 戊戌丙寅十六申 四六七九子月真
59. 己亥辛酉廿七猪 正四六月金蝉出
60. 庚子乙卯初九虎 二四后六金蝉舞
61. 辛丑己卯十九蛇 二四六九子鼠爬
62. 壬寅甲戌三十申 正三四六九腊真
63. 癸卯戊辰十一亥 玉兰后四鸡牛在
64. 甲辰黑龙廿二虎 二四七九再加五
65. 乙巳丁亥初三辰 正月五八季月临
66. 丙午庚辰十五羊 后三五八九牛羊
67. 丁未青龙廿五狗 三六七九子上走
68. 戊申己亥初七丑 正三六子后七九
69. 已酉癸亥十八辰 金蝉三五还有寅
70. 庚戌丁巳廿八未 二三五八子月对
71. 辛女壬子初九戌 水局正四后五居
72. 壬子红鼠廿一卯 正三四六八子小
73. 癸丑庚午初二辰 二四五七八子真
74. 甲寅甲子十三羊 后四五八水局长
75. 乙卯戊子廿四酉 三五六八十一九
76. 丙辰壬午初六鼠 五九后八水局主
77. 丁巳丙午十七卯 二五七九子丑找
78. 戊午庚子廿七马 二五八十腊月查
79. 已未木羊初八酉(闰六) 二三五七十与丑
80. 庚申己未十九鼠 二月三月七十五
81. 辛酉甲寅三十兔 正三四六猴与猪
82. 壬戌戊申十一马 玉兰后四七九查
83. 癸亥壬申廿二酉 二四五七亥猪走
84. 甲子丙寅初三夜 二五六八九后十
85. 乙丑庚寅一五卯 正四六八狗鼠跑
86. 丙寅甲申廿六午 正四七九牛与鼠
87. 丁卯戊寅初七猴 二四后六九子丑
88. 戊辰壬寅十七亥 九月玉兰丑牛在
89. 已巳丁酉廿八寅 二三五七九月真
90. 庚午壬辰初九蛇 正三四六后五八
91. 辛未丙辰二十.申 正三四六七九真
92. 壬申庚戌当日亥 正四五七鸡猪来
93. 癸酉甲辰十三虎 金蝉后三正七五
94. 甲戌丁卯廿四蛇 四六八九子月查
95. 乙亥壬戌初五猴 正四子六后八九
96. 丙子红狗十六亥 正三六八鼠牛在
97. 丁丑庚辰廿七虎 二四六九丑牛犊
98. 戊寅乙亥初八辰 二三双五鸡鼠奔
99. 己卯黄猪十九未 二三五六八丑对
2000 庚辰癸巳廿九狗 三四六七九牛走
万年历怎么算?
万年历是一种将公历、农历、干支历相互对应,编排在一起的历学工具书。查用万年历,主要是使用年历中的干支纪时。
干支纪时是我国独创的历史最悠久的历法。它以天象为依据,符合物候特点,体现了五行旺衰。在诸多学科中,有着其它历法不可替代的作用。干支纪时,在中医、气功、周易数术、农作、历法等领域中:有着特殊的实用价值。每当需用干支纪时,而需用者手中没有万年历的时候,往往束手无策。
,只需记住十四字的歌诀,一年中的干支纪时就可迅速算出。这种快速心算万年历的方法,叫“银盘子”,“银盘子”是民间术士创造的万年历速算法,历史悠久,以往采用师徒间口授方法传授,严禁外传,我们在此将“银盘子”合盘端出,公诸於世,以进一步探讨揭秘。
“银盘子”是以农历为基础,推算干支纪时的方法。
农历有大月、小月之分,大月30天,小月29天。如果不考虑小月因素,农历两个月60天,与一个甲子六十组干支数目相符,即每两个月可重合一个甲子。按照这样一个规律,知道了某年的正月初一的日干支,就等于知道了三月初一,五月初一,七月初一,九月初一,十一月初一的日干支,这几个月的初一的日干支,应是相同的(有闰月者,月分稍有变化)因为农历中存在小月,只要知道某年有几个小月,其分别为哪几个月,所推日期经历了几个小月,干支纪日顺延几天就是了,这样心算干支纪日就变得十分简单了。
心算万年历,必须了解以下四个要点:。 (1)该年岁次;(2)正月初一的日干支;(3)立春的日、时;(4)当年几个小月,分别为哪几个月。
“银盘子”仅用了十四个字的歌诀,便将以上四个问题圆满地解决了。“银盘子”的创造者,为了保守秘密,在编制口诀时,采用了“加密术”,即对同一地支,往往采用多种称谓。这样做,一是提供了多一些的音韵,使编出的歌诀押韵。而更主要的是为这种心算法采取了“加密”。同一地支众多称谓,变换使用,即便外人听到也不得其解。
“银盘子”不但对地支称谓进行了加密处理,为了便于记忆,控制歌诀字数,还设置了一些相关月份的简称。月时,可称“金蝉”。另外遇到闰月,分别以前、后、双表示。如后五,指闰五月,前三,指前三月,双七指前、后两个七月。
发现节气与农历月之间,有一定规律可以进行修正,只要加上相应的修正值,从立春节即可推算全年任何一个节气的交节日期。大部分节气不差一个时辰。个别节气在推算中会有几个时辰的误差,但用心算法达到这样的精度,已经完全可以满足实用要求了。古人曾规定了一个修正数,不甚精确,笔者经过慎密演算,重新确定了修正值,歌诀是:
立春时刻起根源,
惊蛰倒退时辰三,
要知清明三月节,
不用加减做龙坛。
加八时辰是立夏,
二日退一芒种天,
三日四时为小暑,
五天秋到衣食干。
五日十时交白露,
六日五时寒露天,
六日七时立冬节,
六日四时大雪连。
五日九时交小寒,
推算不会差半天。
以上是从立春节时间起计算不同节气,需要加上有不同时间修正值。了解了由立春起,推算十二节气时修正值,再根据“银盘于”歌,即可算出一年中的任何一个节气的交节时间,知道了交节时间,就能确定干支纪月的起始。
试以1957年为例,推算立冬时间,确定干支纪月。
“银盘子”歌诀曰:“丁酉癸卯初五蛇,木局后刀四申丑上查”。“银盘子”所表达的意思为:1957年岁次丁酉,正月初一的日干支是癸卯,正月初五巳时立春。十月、二月、六月、闰八月、四月、七月、腊月为小月,该年闰八月。
立冬节为十月节,因该年闰八月,所以立冬节在阴历九月中,该年正月初五立春,设九个月后的初五(即九月初五)立冬。立冬前经历了五个小月(小月29日,干支月约30日),先补上五日,再加上修正值六日七个时辰,即为立冬时间。
立冬日期为:九月初五巳时+(五日) +(六日七个时辰)=九月十七日子。
根据“五虎遁”规定,干支月为辛亥月。再以1938年为例,推算芒种节时间,确定干支纪月。
“银盘于”歌诀曰:“戊寅癸亥初五戌,印酉龙羊闰前七”。
“银盘子”所表达的意思为:1938年岁,次戊寅,正月初一日干支为癸亥,该年正月初五戌时立春。该年四月、八月、三月、六月、前七月、十一月为小月,是年闰七月。
芒种节为五月节。芒种经历了三月、四月两个小月,修正值为二日退一时辰。正月初五立春,设五月初五为芒种节。芒种节交节时间为:五月初五戌时+(两日)+(两日-1时辰)=五月初九酉时。根据“五虎遁”规定:干支月为戊午月。
“银盘子”是中国先人在社会实践中创造出来的心算万年历法。只要将六十甲子热练掌握,用心记住十四个字,即可推算出一年之历法。记住数百个字(几十个歌诀)就可推算数十年的历法.可以说学会此法,即胸有历书,很有实用价值。现在我们大力提倡学术交流’,不搞门户之见,完全可以去掉“银盘子”的加密做法,重新编制歌诀,使之更简明、易记,让更多的人掌握心算万年历法,使这种隐匿在民间的秘术服务于社会。
注;本文银盘子古歌诀由山东肥城栾昌明老先生提供。
C语言的万年历中的算法的问题
这是根据公元日历的编排,每400年是一个大周期,在400年中设置97个闰年,于是2001年与1年的1月1日都是星期一,
对于输入的年号y,y年的1月1日是w,其中w = s mod 7 的余数,0 代表周日;
那么s的值的计算公式是:s=y-1+[(y-1)/4]-[(y-1)/100]+[(y-1)/400]+1,
其中[]表示取整的意思。
这是大家在计算万年历用的一个公式,就好像计算圆的周长,面积等。
具体s的计算公式推导,大家也都不太了解,只是在求万年历算法的时候,会用到它。
感觉知道上面的就应该可以了。
农历的算法是怎么算的?
农历一年为12或13个月,每个月天数依照月亮围绕地球运行周期而定,为29或30天,闰年为13个月,中国农历年平年为353或354天,闰年为384或385天,平均每年约为365.2422天(即地球环绕太阳一周的时间)。
农历基本上以19年为一周期,对应于公历同一时间。如公历的2001年5月27日、1982年5月27日和1963年5月27日这个日子,都是闰四月初五。
闰月加到哪个月,以农历历法规则推断,主要依照与农历的二十四节气相符合来确定。自冬至开始,逢单数为节气,逢双数为中气,如轮到一个月只有节气没有中气,即为上一个月的闰月。 农历的闰月天数与正常月份天数一样,为29或30天。
扩展资料
农历是我国传统历法,又有阴历、华历、夏历、汉历、中历等名称。农历并不是纯阴历,而是一种阴阳合历,取月相的变化周期即朔望月为月的长度,加入干支历“二十四节气”成分,参考太阳回归年为年的长度,通过设置闰月以使平均历年与回归年相适应。农历是以阴历(夏历)为基础,融合阳历成分而成的一种历法。所以我国的农历从严格意义上说不应该叫阴历,而是阴阳合历。
农历属于一种阴阳合历:其年份分为平年和闰年。平年为十二个月;闰年为十三个月。月份分为大月和小月,大月三十天,小月二十九天,其平均历月等于一个朔望月。一年中哪个月大,哪个月小,由计算决定。
农历是兼顾太阳、月亮与地球关系的一种历法。阴历不考虑地球绕太阳的运行,因而使得四季的变化在阴历上就没有固定的时间,不能反映季节。与阳历年固定在365天或366天不同的是,阴历年相比阳历年在天数上有时会相差一个月;为了协调阴历年与阳历年之间的天数,于是便通过“置闰法”进行调整使阴历月相总天数与阳历回归年总天数相适应。
参考资料:百度百科-农历
c语言编写万年历时计算每月第一天是星期几的公式是什么
C语言根据日期判断星期几,使用基姆拉尔森计算公式:
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
以公元元年为参考,公元元年1月1日为星期一
参考代码:
#includevoid CaculateWeekDay(int y,int m, int d)
{
if(m<=2) {
m+=12;
y--;
}
int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
{
case 0: printf("星期一\n"); break;
case 1: printf("星期二\n"); break;
case 2: printf("星期三\n"); break;
case 3: printf("星期四\n"); break;
case 4: printf("星期五\n"); break;
case 5: printf("星期六\n"); break;
case 6: printf("星期日\n"); break;
}
}
void main()
{
CaculateWeekDay(2015,10,1);
}
万年历农历月大小计算公式
没有简单的计算公式,只有已经封装好了的C/C++的库,需要通过调用来得到大小月,或者是根据已有的数据(查表或现成的万年历)查询得到。
农历月的大小与月、地、日这三者的相对位置有直接关系,因此不可能通过简单的计算得到,需要得到每次朔月的时刻,然后再通过两个朔望月之间的天数来决定月份的大小,小月29天,大月30天。
如果你想尝试着编写,我可以提供相关资料和库,有兴趣可以继续扩展一下。
计算万年历的每一天是星期几的公式的意思?
万年历具有以下特点:
1。平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。
由于公元1月1日设为星期六,故3月1日为星期三。 ——注意这个“三”
为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。
2。每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。)
所以百年%4=0闰或(年%4=0并且年<>0)闰。
3。每 4年(3个平年+1个闰年)共208周+5天 ——注意这个“5天”
每百年共100*(208周+5天)-1天=5217周+5天 ——注意这个“5天”(整百年暂设为平年)
每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天——注意这个“0天”和
“1天”(4个整百年只有一个闰年)
即400年一轮回!(原来万年历400年前是一家)
......