返回列表 回复 发帖
  • 发新话题
  • 发布投票
  • 发布悬赏
  • 发布辩论
  • 发布活动
  • 发布视频
  • 发布商品
又见南山
  • 发短消息
  • 加为好友

又见南山 当前离线

UID
5161 
帖子
53 
精华
积分
63 
阅读权限
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
2005-8-17 

游客

1#

发表于 2004-8-26 19:16 | 只看该作者

关于公历年月日与干支的转化问题

本来的题目叫“关于公历年月日、农历月相与干支的转化问题”,但后面一半未写成,公式也未选择好,等不及了先写出简单些的。各位都是高人,举一必能反三。我也是边写边修正,大家多提意见。

一、        前提假设:历史上日子干支是连续的
二、        建立时间坐标:
1、        以公元1年1月0日(即公元前1年12月31日)为原点;
2、        坐标单位是日。
3、        历史日子到原点的距离就是该日子的坐标,称为“公元日序数”,原点前的公元日序数为负,原点后的公元日序数为正。例如公元1年1月1日的公元日序数为1,公元前1年1月1日的公元日序数为-1。每个历史日子只有一个公元日。公元日序数是连续的。

说明:建立时间坐标系统,是编制历法、表格的一般性方法。选取公元历作为时间参照系主要是按因应一般使用习惯,它本身只是一种简单易算的工具,其实选用另一种理想历法并无不可。(按一般历史书的记法,1582年10月4日及以前的普遍用儒略历,1582年10月15日的用格列哥里历,今从此)。

三、        公元日序数的算法:

1、公元1582年10月4日前日子的公元日序数求法:
不难按历法知道:
公元日(P)=365*(年号(Y) -1)+闰年数+ 本年的日数
根据儒略历四年一闰的法则(逢被4整除的均置闰)得:

P = 365*(Y-1)+ [ Y/4] + Q

式中“[   ]”是取整符号;Q是从要算的日子到1月1日的天数加1,由于公历的月份有固定的天数,1、3、5、7、8、10、12是大月31天,4、6、9、11日小月30天,2月份置闰月严格按28天算,(为了直观些,稍后我会用坐标来移及一些数学方法,表述成一条用月、日表示的代数式)。
值得注意的是:闰年时,未到3月1日要减1。

例1、        公元227年5月4日的公元日序数是:365*226+[227/ 4]+31+28+31+30+4=82670
例2、        公元1582年10月4日的公元日序数是:365*1581+[1582/4] + 31*5+30*3+28+4 =577737

2、公元1582年10月15日后的日子的公元日序数求法:
     公元1582年10月15日是公元1582年10月4日的后一天,故其公元日577738(见例2),格列哥里历按四年一闰,被4整除的均置闰,但逢百年时需被400整除的方置闰,其它百年不置,故四百年有97闰。公式为:

P=365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] +Q+15-3-10
=365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] +Q +2

式中第2、3、4项是格列哥里历的置闰方法。我们可以对照比1582年以前的置闰方法,多了- [Y/100] +[ Y/400]一项,故需减去 - [1582/100]+[1582/400]以校正之;同时从1582年10月4日到1582年10月15日之间跳过了10日,所以同时减去10,使公元日连续。大家可以代入验算一下,它与此1582年10月4日的序数是连续的。

例3、        公元1582年10月15日的公元日序数:
365*1581+[1582/4]  -  [1582/100] + [1582/400] + 31*5+30*3+28+15+2 =577738
例4、        公元2003年4月2日的公元日序数:
365*2002+[2003/4]  -  [2003/100] + [2003/400] + 31+28+31+2+2 =731309

3、公元前日子的公元日序数求法:
尽管儒略历在公元前46年完成,但以前的日期一般的历史书均按儒略历上推,所以也从约定俗成。儒略历按四年一闰,其公式是:

公元日序数=365*年号(负号)+闰年数(负号)+本年的日数(正号)
  P=  -365*Y - [(Y+3)/4]+Q

公元前的求法与公元后的有所不同:后者的计算方向从年、从月、从日是一路远离原点的;前者则是“年”远离了原点,月、日反过来接近原点,这点大家要记住。
(如果选取一个很前的原点,则可以使序数的方向永远为正,但为了便于一般人理解及习惯,我还是放弃了这样叙述------事实上太初历等古代历法一般选取一个很远的天文日作原点的)

例5、        公元前1年1月1日的公元日序数是:-365*1- [(3+1)/4 ]+1=  -365
例6、        公元前202年2月28日的公元日序数:-365*202 – [(202+3)/4] + 31+28= -73722

我们把三个公式并列如下:
(公式1)
P=  -365*Y - [(Y+3)/4]+Q                      (公元前)
P = 365*(Y-1)+ [ Y/4] + Q                      (公元后至1582年10月4日)
P=365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] +Q +2      (1582年10月15日后)

(以下一段选读)
事实上我们可将坐标“平移”,将原点移到公元1年2月28日。将3月1日“作为”一年的开端,平移的目的是为了使置闰放在一年的最后一天,减小置闰对各月份的影响。(事实上我开始推导时是用这方法的,求得结果后才平移成现在的方式)如此,作月份相应减小2,(3=1,4=2,…………1月等于上年的11月,2月是12月),公元日序数则相应增加59。如此则Q的值也可用相关的月(M)、日(D)代数式表示:
Q=30(M-1)+[0.6(M-1)+0.5] +D
(这纯是个数学问题,我不想在这里证明。反正是十二个月,大家直接代入看看)
如此变换后的公式变为:Y年M月D日  (M为正常月减2,1月时为11月)
(公式二)
   P=  -365*Y - [(Y+3)/4]+30M+[0.6M-0.1]+D+29                 (公元前)
P = 365*(Y-1)+ [ Y/4] + 30M+[0.6M-0.1]+D+29           (公元后至1582年10月4日)
P=365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] + 30M+[0.6M-0.1]+D+31 (1582年10月15日后)

四、干支的求法
知道了一个日子的公元日序数是,要求该日子的干支序数是一个很容易容易的事了,思路是:
一已知干支的日子———推出原点的干支序数———推出任一历史日子序数
(读者诸公一定想到用类似的方法求有固定周期的朔望了)
不难知:
  历史日子的干支序数= (原点的干支序数+ 公元日序数)除以60取余数
K=(‘K + P)mod 60     
                       
利用例4,公元2003年4月2日的公元日序数是731309,干支乙巳(序数42)则
42=(‘K+731309)mod 60      ‘K=42-731309= -731267=  -47 =13  mod 60
即原点(公元前1年12月31日)的干支序数为13(丙子),我们将结果代入公式一,则
(公式三)
K=(13+P)mod 60

例7、        求公元1582年10月15日的干支。利用例3的结果有
K=(577738 + 13)mod 60=11,即该日甲戌。

我们将公式三代入公式一,则

K= (-365*Y - [(Y+3)/4]+Q+13 )mod 60                      (公元前)
K= (365*(Y-1)+ [ Y/4] +Q+13 )mod 60                 (公元后至1582年10月4日)
K=(365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] +Q +15)mod 60      (1582年10月15日后)

我们当然可以使用数学方法将公式化简,以下是我使用的化简式:
(公式四) Y年M月D日(M从三月开始,M相应减2)

K= (-5Y-[(Y+3)/4]+30M+ [0.6M-0.1]+ D+42 ) mod 60             (公元前)
K=(5Y+ [ Y/4] + 30M+ [0.6M-0.1] + D+37)mod 60                     (1~1582:10:4)
K=(5Y+ [Y/4] - [Y/100] +[ Y/400]+ 30M+ [0.6M-0.1]+ D+ 39)mod 60    (1582:10:4以后)

我用手上天文台编的三千年公历干支朔望对照表抽样校对了几个日子,准确无误。可见它也是采用同样原理编订的。
反过来,知道干支及大约的月份,求公元日序数(公元历)只是解方程的问题而已。

五、举例及应用

例8、        汉书所说高祖五年(己亥)二月甲午即皇帝位的,该日的公历是多少?
高祖五年己亥是前202年,二月大约在公历3月附近,干支甲午序数31,代入公式四得
-202*5 – [(202+3)/4]+30*1+[0.6M-0. 1]+D+42 =31 mod 60
整理得  -989+D=31 mod 60   D=(31+989 ) mod 60   D=0  mod 60
解出D=0,或60,即该日是3月0日(2月28日),或过60天以后的4月29日。

验算:严格按儒略历四年一闰的算法,公元前202年2月28日的公元日序数为 –73722,
-73722+13= -73709 =  - 29 =31 mod 60 该日甲午。演算没错!!

六、结语:方法是类似解释几何的的方法:
首先建立一个连续时间坐标,
第二是根据公历的规律建立任意日子到原点间的距离公式(公元日序数)
第三是对于有固定周期的属性(干支、月相等),可从任一已知属性的日子利用与原点的距离推出原点的属性。
第四是根据原点的属性利用某点与原的距离推知该点的属性。
第五公式的化简与选择只是一些技术问题。

我向来粗疏,大家如发觉有逻辑上,或计算上的错误,可告我改正。

 
回复 引用

TOP

   
无情渐有情
  • 发短消息
  • 加为好友

无情渐有情 当前离线

UID
3832 
帖子
217 
精华
积分
224 
阅读权限
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
1970-1-1 

游客

2#

发表于 2004-8-26 19:16 | 只看该作者

从来都是查书,这会只能做学生
 
回复 引用

TOP

   
又见南山
  • 发短消息
  • 加为好友

又见南山 当前离线

UID
5161 
帖子
53 
精华
积分
63 
阅读权限
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
2005-8-17 

游客

3#

发表于 2004-8-26 19:16 | 只看该作者

其实最重要的是能计算历史日子与原点间的距离。

其实最重要的是能计算历史日子与原点间的距离P,如此一切有固定周期的均可算出:

星期:
S=(‘S+P)mod 7
干支:
K=(‘K+P)mod 60
二十八宿:
H=(‘H+P)mod 28
月相:
Mo=(‘Mo+P)mod 29.53059

‘S、‘K、‘H、‘Mo等都是原点的属性,可用待定系数法求出。

[此贴子已经被作者于2003-4-4 13:04:15编辑过]

 
回复 引用

TOP

   
潇潇一水间
  • 发短消息
  • 加为好友

潇潇一水间 (中书令)当前离线

UID
72 
帖子
2325 
精华
26 
积分
4379 
阅读权限
110 
来自
燕南赵北 
在线时间
101 小时 
注册时间
2004-8-24 
最后登录
2012-12-20 

版主

4#

发表于 2004-8-26 19:16 | 只看该作者

我晕!

我向来对数字和符号头痛!

看来只好叫兄台换算好后告诉我啦!

 
回复 引用

TOP

   
水電工2
  • 发短消息
  • 加为好友

水電工2 当前离线

UID
2907 
帖子
2302 
精华
积分
2010 
阅读权限
50 
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
2004-9-29 

进士

5#

发表于 2004-8-26 19:16 | 只看该作者

很高興在國學網的朋友也懂程式設計!
在陳遵媯先生的《中國天文學史》(二)的1373頁
,有個簡單的換算公式,經過初步驗算,是準確
的。打算用簡單的Perl語言把它寫出來讓大家用
,如果有朋友懂程式,會把該公式內容以Images
放上來,很希望有朋友能來共襄盛舉!讓我們把
它寫出來!
 
回复 引用

TOP

   
无情渐有情
  • 发短消息
  • 加为好友

无情渐有情 当前离线

UID
3832 
帖子
217 
精华
积分
224 
阅读权限
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
1970-1-1 

游客

6#

发表于 2004-8-26 19:16 | 只看该作者

南山兄,水电工,大家都在等你们俩的精彩表演。
 
回复 引用

TOP

   
zhaojing
  • 发短消息
  • 加为好友

zhaojing 当前离线

UID
13439 
帖子
11 
精华
积分
21 
阅读权限
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
1970-1-1 

游客

7#

发表于 2004-8-26 19:16 | 只看该作者

英雄所见略同

以下是引用又见南山在2003-4-2 13:31:46的发言:
本来的题目叫“关于公历年月日、农历月相与干支的转化问题”,但后面一半未写成,公式也未选择好,等不及了先写出简单些的。各位都是高人,举一必能反三。我也是边写边修正,大家多提意见。

一、&nbsp前提假设:历史上日子干支是连续的
二、&nbsp建立时间坐标:
1、&nbsp以公元1年1月0日(即公元前1年12月31日)为原点;
2、&nbsp坐标单位是日。
3、&nbsp历史日子到原点的距离就是该日子的坐标,称为“公元日序数”,原点前的公元日序数为负,原点后的公元日序数为正。例如公元1年1月1日的公元日序数为1,公元前1年1月1日的公元日序数为-1。每个历史日子只有一个公元日。公元日序数是连续的。

说明:建立时间坐标系统,是编制历法、表格的一般性方法。选取公元历作为时间参照系主要是按因应一般使用习惯,它本身只是一种简单易算的工具,其实选用另一种理想历法并无不可。(按一般历史书的记法,1582年10月4日及以前的普遍用儒略历,1582年10月15日的用格列哥里历,今从此)。

三、&nbsp公元日序数的算法:

1、公元1582年10月4日前日子的公元日序数求法:
不难按历法知道:
公元日(P)=365*(年号(Y)&nbsp-1)+闰年数+&nbsp本年的日数
根据儒略历四年一闰的法则(逢被4整除的均置闰)得:

P&nbsp=&nbsp365*(Y-1)+&nbsp[&nbspY/4]&nbsp+&nbspQ

式中“[&nbsp&nbsp&nbsp]”是取整符号;Q是从要算的日子到1月1日的天数加1,由于公历的月份有固定的天数,1、3、5、7、8、10、12是大月31天,4、6、9、11日小月30天,2月份置闰月严格按28天算,(为了直观些,稍后我会用坐标来移及一些数学方法,表述成一条用月、日表示的代数式)。
值得注意的是:闰年时,未到3月1日要减1。

例1、&nbsp公元227年5月4日的公元日序数是:365*226+[227/&nbsp4]+31+28+31+30+4=82670
例2、&nbsp公元1582年10月4日的公元日序数是:365*1581+[1582/4]&nbsp+&nbsp31*5+30*3+28+4&nbsp=577737

2、公元1582年10月15日后的日子的公元日序数求法:
&nbsp&nbsp&nbsp&nbsp&nbsp公元1582年10月15日是公元1582年10月4日的后一天,故其公元日577738(见例2),格列哥里历按四年一闰,被4整除的均置闰,但逢百年时需被400整除的方置闰,其它百年不置,故四百年有97闰。公式为:

P=365*(Y-1)+&nbsp[Y/4]&nbsp-&nbsp[Y/100]&nbsp+[&nbspY/400]&nbsp+Q+15-3-10
&nbsp=365*(Y-1)+&nbsp[Y/4]&nbsp-&nbsp[Y/100]&nbsp+[&nbspY/400]&nbsp+Q&nbsp+2

式中第2、3、4项是格列哥里历的置闰方法。我们可以对照比1582年以前的置闰方法,多了-&nbsp[Y/100]&nbsp+[&nbspY/400]一项,故需减去&nbsp-&nbsp[1582/100]+[1582/400]以校正之;同时从1582年10月4日到1582年10月15日之间跳过了10日,所以同时减去10,使公元日连续。大家可以代入验算一下,它与此1582年10月4日的序数是连续的。

例3、&nbsp公元1582年10月15日的公元日序数:
365*1581+[1582/4]&nbsp&nbsp-&nbsp&nbsp[1582/100]&nbsp+&nbsp[1582/400]&nbsp+&nbsp31*5+30*3+28+15+2&nbsp=577738
例4、&nbsp公元2003年4月2日的公元日序数:
365*2002+[2003/4]&nbsp&nbsp-&nbsp&nbsp[2003/100]&nbsp+&nbsp[2003/400]&nbsp+&nbsp31+28+31+2+2&nbsp=731309

3、公元前日子的公元日序数求法:
尽管儒略历在公元前46年完成,但以前的日期一般的历史书均按儒略历上推,所以也从约定俗成。儒略历按四年一闰,其公式是:

公元日序数=365*年号(负号)+闰年数(负号)+本年的日数(正号)
&nbsp&nbspP=&nbsp&nbsp-365*Y&nbsp-&nbsp[(Y+3)/4]+Q

公元前的求法与公元后的有所不同:后者的计算方向从年、从月、从日是一路远离原点的;前者则是“年”远离了原点,月、日反过来接近原点,这点大家要记住。
(如果选取一个很前的原点,则可以使序数的方向永远为正,但为了便于一般人理解及习惯,我还是放弃了这样叙述------事实上太初历等古代历法一般选取一个很远的天文日作原点的)

例5、&nbsp公元前1年1月1日的公元日序数是:-365*1-&nbsp[(3+1)/4&nbsp]+1=&nbsp&nbsp-365
例6、&nbsp公元前202年2月28日的公元日序数:-365*202&nbsp–&nbsp[(202+3)/4]&nbsp+&nbsp31+28=&nbsp-73722

我们把三个公式并列如下:
(公式1)
P=&nbsp&nbsp-365*Y&nbsp-&nbsp[(Y+3)/4]+Q&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(公元前)
P&nbsp=&nbsp365*(Y-1)+&nbsp[&nbspY/4]&nbsp+&nbspQ&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(公元后至1582年10月4日)
P=365*(Y-1)+&nbsp[Y/4]&nbsp-&nbsp[Y/100]&nbsp+[&nbspY/400]&nbsp+Q&nbsp+2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(1582年10月15日后)

(以下一段选读)
事实上我们可将坐标“平移”,将原点移到公元1年2月28日。将3月1日“作为”一年的开端,平移的目的是为了使置闰放在一年的最后一天,减小置闰对各月份的影响。(事实上我开始推导时是用这方法的,求得结果后才平移成现在的方式)如此,作月份相应减小2,(3=1,4=2,…………1月等于上年的11月,2月是12月),公元日序数则相应增加59。如此则Q的值也可用相关的月(M)、日(D)代数式表示:
Q=30(M-1)+[0.6(M-1)+0.5]&nbsp+D
(这纯是个数学问题,我不想在这里证明。反正是十二个月,大家直接代入看看)
如此变换后的公式变为:Y年M月D日&nbsp&nbsp(M为正常月减2,1月时为11月)
(公式二)
&nbsp&nbsp&nbspP=&nbsp&nbsp-365*Y&nbsp-&nbsp[(Y+3)/4]+30M+[0.6M-0.1]+D+29&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(公元前)
P&nbsp=&nbsp365*(Y-1)+&nbsp[&nbspY/4]&nbsp+&nbsp30M+[0.6M-0.1]+D+29&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(公元后至1582年10月4日)
P=365*(Y-1)+&nbsp[Y/4]&nbsp-&nbsp[Y/100]&nbsp+[&nbspY/400]&nbsp+&nbsp30M+[0.6M-0.1]+D+31&nbsp(1582年10月15日后)

四、干支的求法
知道了一个日子的公元日序数是,要求该日子的干支序数是一个很容易容易的事了,思路是:
&nbsp一已知干支的日子———推出原点的干支序数———推出任一历史日子序数
(读者诸公一定想到用类似的方法求有固定周期的朔望了)
&nbsp不难知:
&nbsp&nbsp历史日子的干支序数=&nbsp(原点的干支序数+&nbsp公元日序数)除以60取余数&nbsp
&nbspK=(‘K&nbsp+&nbspP)mod&nbsp60&nbsp&nbsp&nbsp&nbsp&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
利用例4,公元2003年4月2日的公元日序数是731309,干支乙巳(序数42)则
42=(‘K+731309)mod&nbsp60&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp‘K=42-731309=&nbsp-731267=&nbsp&nbsp-47&nbsp=13&nbsp&nbspmod&nbsp60
即原点(公元前1年12月31日)的干支序数为13(丙子),我们将结果代入公式一,则
(公式三)
K=(13+P)mod&nbsp60

例7、&nbsp求公元1582年10月15日的干支。利用例3的结果有
K=(577738&nbsp+&nbsp13)mod&nbsp60=11,即该日甲戌。

我们将公式三代入公式一,则

K=&nbsp(-365*Y&nbsp-&nbsp[(Y+3)/4]+Q+13&nbsp)mod&nbsp60&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(公元前)
K=&nbsp(365*(Y-1)+&nbsp[&nbspY/4]&nbsp+Q+13&nbsp)mod&nbsp60&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(公元后至1582年10月4日)
K=(365*(Y-1)+&nbsp[Y/4]&nbsp-&nbsp[Y/100]&nbsp+[&nbspY/400]&nbsp+Q&nbsp+15)mod&nbsp60&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(1582年10月15日后)

我们当然可以使用数学方法将公式化简,以下是我使用的化简式:
(公式四)&nbspY年M月D日(M从三月开始,M相应减2)

K=&nbsp(-5Y-[(Y+3)/4]+30M+&nbsp[0.6M-0.1]+&nbspD+42&nbsp)&nbspmod&nbsp60&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(公元前)
K=(5Y+&nbsp[&nbspY/4]&nbsp+&nbsp30M+&nbsp[0.6M-0.1]&nbsp+&nbspD+37)mod&nbsp60&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp(1~1582:10:4)
K=(5Y+&nbsp[Y/4]&nbsp-&nbsp[Y/100]&nbsp+[&nbspY/400]+&nbsp30M+&nbsp[0.6M-0.1]+&nbspD+&nbsp39)mod&nbsp60&nbsp&nbsp&nbsp&nbsp(1582:10:4以后)

我用手上天文台编的三千年公历干支朔望对照表抽样校对了几个日子,准确无误。可见它也是采用同样原理编订的。
反过来,知道干支及大约的月份,求公元日序数(公元历)只是解方程的问题而已。

五、举例及应用

例8、&nbsp汉书所说高祖五年(己亥)二月甲午即皇帝位的,该日的公历是多少?
高祖五年己亥是前202年,二月大约在公历3月附近,干支甲午序数31,代入公式四得
-202*5&nbsp–&nbsp[(202+3)/4]+30*1+[0.6M-0.&nbsp1]+D+42&nbsp=31&nbspmod&nbsp60
整理得&nbsp&nbsp-989+D=31&nbspmod&nbsp60&nbsp&nbsp&nbspD=(31+989&nbsp)&nbspmod&nbsp60&nbsp&nbsp&nbspD=0&nbsp&nbspmod&nbsp60
解出D=0,或60,即该日是3月0日(2月28日),或过60天以后的4月29日。

验算:严格按儒略历四年一闰的算法,公元前202年2月28日的公元日序数为&nbsp–73722,
-73722+13=&nbsp-73709&nbsp=&nbsp&nbsp-&nbsp29&nbsp=31&nbspmod&nbsp60&nbsp该日甲午。演算没错!!

六、结语:方法是类似解释几何的的方法:
首先建立一个连续时间坐标,
第二是根据公历的规律建立任意日子到原点间的距离公式(公元日序数)
第三是对于有固定周期的属性(干支、月相等),可从任一已知属性的日子利用与原点的距离推出原点的属性。
第四是根据原点的属性利用某点与原的距离推知该点的属性。
第五公式的化简与选择只是一些技术问题。

我向来粗疏,大家如发觉有逻辑上,或计算上的错误,可告我改正。

求y年m月d日世界时正午的儒略日JD:
儒略历:
JD=365*(y-1)+[y/4] +30*(m-3)+[0.6*(m+1)]-2 +d +1721482.0
格里历:
JD=365*(y-1)+[y/4]-[y/100]+[y/400] +30*(m-3)+[0.6*(m+1)]-2 +d +1721484.0
说明:
1)凡1月、2月视为上一年的13月、14月;
2)公式中[x]=不大于x的最大整数,
如[5]=5,[5.2]=5,[5.8]=5,[0]=0,[-5]=-5,[-5.2]=-6,[-5.8]=-6;
3)计算公元前日期时,年份BC1,BC2,BC3...视为0,-1,-2...,而月份、日序仍然作正数;
4)儒略日是以日为单位的不间断的纪时方法,以儒略历公元前4713年1月1日世界时正午为儒略日起算点;
5)一些特殊日期:
BC4713.1.1=JD0.0(该日是星期一,癸丑日)
AD1.1.1=JD1721424.0
AD1582.10.4=JD2299160.0
AD1582.10.15=JD2299161.0;
6)AD1582.10.4的次日为AD1582.10.15,从此行用格里历。对于此前的日期习惯上一律按照儒略历推算,而不考虑罗马历法的实际施行情况;
7)本法较适用于编为程序应用,稍加补充后即可应用于星期及日干支的计算。

1998年前后我为计算儒略日曾经求出上述公式,其中对日期的处理自认为颇具巧思,现在看了阁下“关于公历年月日与干支的转化问题”一文,真是英雄所见略同啊!

 
回复 引用

TOP

   
贯慈
  • 发短消息
  • 加为好友

贯慈 当前离线

UID
13558 
帖子
10 
精华
积分
20 
阅读权限
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
2006-7-9 

游客

8#

发表于 2004-8-26 19:16 | 只看该作者

我有一本“张氏公元万年甲子纪日速算法”,作者是张致中、张幼明。重庆出版社出版,我这本儿是82年出的。可以找找。
 
回复 引用

TOP

   
慕云石
  • 发短消息
  • 加为好友

慕云石 当前离线

UID
13907 
帖子
精华
积分
13 
阅读权限
10 
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
1970-1-1 

书生

9#

发表于 2004-8-26 19:16 | 只看该作者

又是数字符号,郁闷
 
回复 引用

TOP

   
七秩龄童
  • 发短消息
  • 加为好友

七秩龄童 当前离线

UID
5834 
帖子
591 
精华
积分
761 
阅读权限
30 
在线时间
99 小时 
注册时间
2004-8-24 
最后登录
2013-7-12 

举人

10#

发表于 2004-8-26 19:16 | 只看该作者

久违了!很高兴又见“南山”兄大作。
    关于“公历”年月日公元前日期与中国历史纪年的干支转换问题,希望南山兄和各位关心这个问题的网友共同来统一一下思想:
     1大家公认为“公历”的起点日,比如南山兄以之为“原点”的前1年月12月31日这天,其对应的“中历”日期的干支,要公认和统一,有大家的“约法”或“立法”才好。
大作以之为例子该日干支为“丙子”,我也是如此认定的。但权威的资历料不是这样表述的。如1989年版《辞海》附《中国历史年表》,还有台湾中央研究院计算中心网站公布的《中西历转换工具》(ASCC),按它们确指为公(西)元元年1月1日对应日期的干支为“戊寅”。如用此反溯一日,南山兄作为例子的前1年1月31日干支则不是“丙子”而另为“丁丑”日了!?
     2、中历向上与“公历”向上反溯的“公历”日期,也要公认一条“规则”才行。作为“规则”较密近天象,自然以“格里高利”为优。但多以“儒略历”规则,也无不可。只是要求统一。问题出在:公认的权威数据,却是来自对公认的“公历”来源于《儒略历》以前发生的历史的默契和肯定。按《儒略历》规则,四年当置一闰日(于2月为29天)。可从上举两份权威资料的日期安排看,公历1年至7年间,却未应期安排“闰日”。表上连着七年,每年的2月都是28天。
     关于中国历史日期与“公历”反溯对照,与天象密近否,有关系,但更重要的是统一,才有标尺。不知诸兄以为然否?
 
回复 引用

TOP

   
又见南山
  • 发短消息
  • 加为好友

又见南山 当前离线

UID
5161 
帖子
53 
精华
积分
63 
阅读权限
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
2005-8-17 

游客

11#

发表于 2004-8-26 19:16 | 只看该作者

兄好,这是旧年的贴子了。近几个月为口奔波,已很少时间上网,更不要说发贴了。等四月份稍闲,再与君一聚。
 
回复 引用

TOP

   
等活
  • 发短消息
  • 加为好友

等活 当前离线

UID
7186 
帖子
39 
精华
积分
49 
阅读权限
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
2005-4-2 

游客

12#

发表于 2004-8-26 19:16 | 只看该作者

先把日干支与儒略日对应起来。这个对应简单明了,不会造成混乱。
然后要把儒略日“翻译”成儒略历还是格里历,就按各自的约定而行。
格里历通行之后用格里历自然没有问题;儒略历通行的年代用儒略历也没有问题。
问题是儒略历通行之前的年代,该用什么历?也即中国先秦的日期翻译成公历应该用什么历?
有人主张用格里历,我以为不顺。用儒略历更为合理。
 
回复 引用

TOP

   
姬昌
  • 发短消息
  • 加为好友

姬昌 当前离线

UID
13112 
帖子
精华
积分
12 
阅读权限
10 
在线时间
0 小时 
注册时间
2004-8-24 
最后登录
1970-1-1 

书生

13#

发表于 2004-8-26 19:16 | 只看该作者

以下是引用水電工2在2003-4-3 13:38:13的发言:
在陳遵媯先生的《中國天文學史》(二)的1373頁
,有個簡單的換算公式,經過初步驗算,是準確
的。

这本书好难找呵,网上没有,家里有一本第三册。偶又只有上海图书馆的外借证。外借室里好象没有。
有这本书的朋友能不能把这个公式贴出来呵?
偶也想知道呵!

[此贴子已经被作者于2004-3-1 23:24:24编辑过]

 
回复 引用

TOP

   
冯易初
  • 发短消息
  • 加为好友

冯易初 当前离线

UID
14192 
帖子
157 
精华
积分
35 
阅读权限
10 
在线时间
3 小时 
注册时间
2004-8-24 
最后登录
2013-4-22 

书生

14#

发表于 2004-8-26 19:16 | 只看该作者

地支对应黄道十二星座。
这黄道十二星座由于岁差的作用,每2148-2160逆时针移动一位。
所以,这干支应该也是2148-2160年一变的。

我的想法是,天干方位不变(因为天干代表地球五行),地支每2148年或2160年前移一位。在排列上是这样的:
[第一个2148年或2160年]
甲乙丙丁戊己庚辛壬癸
子丑寅卯辰巳午未申酉戍亥

[第二个2148年或2160年]
乙甲丁丙己戊辛庚癸壬
丑寅卯辰巳午未申酉戍亥子

[第三个2148年或2160年]
甲乙丙丁戊己庚辛壬癸
寅卯辰巳午未申酉戍亥子丑

[第四个2148年或2160年]
乙甲丁丙己戊辛庚癸壬
卯辰巳午未申酉戍亥子丑寅

......依此类推

以上是个人的一些看法,仅供参考。
(我在用易卦预测中使用,效果很不错。)

 
回复 引用

TOP

   

返回列表

<http://bbs.guoxue.com/viewthread.php?tid=123202>

关于公历年月日与干支的转化问题相关推荐

  1. java秒转换为年月日_java时间转化为年月日以及将秒转化为天小时分秒字符串显示总结...

    注意:php的后台的时间按照秒计算,android按照毫秒计算,所以时间 String getstrtime = Tool.getNormalTime(Long.parseLong(time + &q ...

  2. 单片机 DS1302 公历年月日 换算出星期、农历月份、农历日期 判断闰年

    传入格式:2020年,12月,12日. 返回1到7 代表星期一到星期天 /** 由年月日获取星期 https://www.cnblogs.com/fengbohello/p/3264300.html* ...

  3. python读取xlsx文件年月日变成数字_python转化excel数字日期为标准日期操作

    伙伴遇到一个关于excel导入数据到python中,日期变成数字而不是日期格式的问题.第一反应这个数字应该是excel里面的时间戳类似的,所以我就实验增加一天是不是对应的数字就加1.最后证明了我的想法 ...

  4. 天干地支的推算(根据公元纪年的年月日推算干支的年月日)

    为了便于运算和使检索更加直观,借用六十干支表并按顺序加以编号成表一如下: 六十干支表 甲子0 乙丑1 丙寅2 丁卯3 戊辰4 己巳5 庚午6 辛未7 壬申8 癸酉9 甲戌10 乙亥11 丙子12 丁丑 ...

  5. time秒和年月日时分秒的转化

    一.时间类型 1.time_t 用来存储从1970年到现在经过了多少秒,实际上就是long int类型: 2.struct timeval 精确到微秒: struct timeval { long t ...

  6. 公历转农历、生肖、干支纪年、节气算法研究和C程序实现

    [本文发布于https://blog.csdn.net/Stack_/article/details/119980697,未经许可不得转载,转载须注明出处] 一.参考文章 阳历转阴历算法概述 1900 ...

  7. mysql 获取农历年份_iOS 获取公历、农历日期的年月日

    iOS 获取公历.农历日期的年月日 介绍三种方法获取 Date (NSDate) 的年月日. 用 date 表示当前日期.测试日期为公历 2017 年 2 月 5 日,农历丁酉年,鸡年,正月初九. l ...

  8. 公历转干支历--lua实现

    干支纪日是现今历史上最长的纪日法,也是中国特有的历法,据考从伏羲氏就开始有创建,从中国古代的夏朝就已经开始使用.我国的干支纪日,从鲁隐公三年二月己巳日(公元前720年2月10日)开始,一直到今天,都未 ...

  9. javascript 公历与农历相互转换工具类

    /*** 公历[1900-1-31,2100-12-31]时间区间内的公历.农历互转* @charset UTF-8* @Author Jea杨(JJonline@JJonline.Cn)* @Ver ...

最新文章

  1. 近期学习的原生JS知识以及jQuery框架
  2. html5行级标签,8、html5哪些标签时块级、行内、行内块?2021-01-30
  3. 《Linux Device Drivers》第十五章 内存映射和DMA——note
  4. pandas算加权平均值_4000 字详解TCP超时与重传,看完没收获算我输
  5. java 需要class interface 或enum_阿里P8教你Java注解与反射
  6. 大数据分析平台架构有哪些
  7. linux ssl 脚本 51cto,升级opensslopenssh的shell脚本
  8. isupper函数python_python字符串是否是大写-python 字符串大写-python isupper函数-python isupper函数未定义-嗨客网...
  9. 【转载】最全的计算广告资料,广告算法工程师入门
  10. Fortify SCA报告模板汇总
  11. 流体仿真中,六面体(Hex)网格的求解效率真的比四面体(Tet)高”很多”么?
  12. MySQL的enclosed-by和escaped-by
  13. 数论:欧几里得与扩展欧几里得算法
  14. JSRPC: WebSocket报错 Refused to connect to ‘ws:<URL>/ws?group=testname=wangluozhe‘ because it violate
  15. 华为鸿蒙有可能成功吗 (by quqi99)
  16. Linux主机IP地址:网络信息不可用
  17. Android连接WiFi
  18. css使用ttf字体
  19. Mqtt开发java开发-消息服务mns中的一些坑
  20. C++-二叉树递归遍历与非递归遍历实现

热门文章

  1. [SinGuLaRiTy] NOIP互测模拟赛
  2. web 前端Icon图标网站
  3. 学习node之——MySQL的安装和基本使用
  4. python爬虫最为核心的HTTP协议解析,及自定义协议的分析
  5. 计算机虽然具有强大的功能但它目前还不能,大学计算机基础考试模拟题一.docx...
  6. 去除字符串的叠词:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
  7. 计算机网络集线,一种基于计算机网络的自卷集线装置的制作方法
  8. 工具类二十 基于oshi的运行环境监控工具类
  9. 如何格式化字符串的xml?
  10. Linux命令分享第一天之find命令