天干地支的算法

如题所述

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

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

天干=(年份-3)/10……余数 余数为几就数几个
地支=(年份-3)/12……余数 同上
比如今年
(2013-3)/10……余数为0 数十个就是癸
(2013-3)/12……余数为6 数六个是巳

扩展资料

来源浅考

相传早在公元前2697年,于中华始祖黄帝建国时,命大挠氏探察天地之气机,探究五行。

一些学者从中国上古的夏代帝王世系和商代汤王以下所有帝王的名字中,探究十天干中的字已被用于名号这一特有现象。郑文光在所著《中国天文学源流》一书中认为,十天干起源于中国古代羲和“生十日”的神话传说,是十进位法概念在纪时中的反映,应当产生于渔猎时代的原始社会;“十二地支”则由常羲“生月十有二”的神话传说演变而来,产生于殷商之前,后逐渐演变为十二辰。所以,郑文光推断:“十二支宜乎是夏人的创作。”

陈遵妫在《中国天文学史》中指出,“在四千多年前的夏代,可能已有干支产生了”。杜石然等则在编著的《中国科学技术史稿》一书中,主张夏代已有十天干纪日法,商代在夏代天干纪日的基础上,进一步使用干支纪法,从而把十天干和十二地支配合在一起形成六十循环的纪日法。

大约在战国末年,依据各国史官长期积累下来的材料编成的史书《世本》说:“容成作历,大桡作甲子”,《尚书正义》解释说:“二人皆黄帝之臣,盖自黄帝以来,始用甲子纪日,每六十日而甲子一周”。看来干支是大桡创制的,大桡“采五行之情,占斗机所建,始作甲乙以名日,谓之干;作子丑以名月,谓之枝,有事于天则用日,有事于地则用月,阴阳之别,故有枝干名也。”

参考资料来源:百度百科:天干地支

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-24
首先我们先要明白天干与地支是如何搭配的
天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸
地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。十天干与十二地支按顺序两两相配,从甲子到癸亥,共六十个组合,即六十甲子。(10与12的最小公倍数是60)

1 2 3 4 5 6 7 8 9 10 11 12
甲子 乙丑 丙寅 丁卯 戊辰 己巳 庚午 辛未 壬申 癸酉 甲戌 乙亥
13 14 15 16 17 18 19 20 21 22 23 24
丙子 丁丑 戊寅 己卯 庚辰 辛巳 壬午 癸未 甲申 乙酉 丙戌 丁亥
25 26 27 28 29 30 31 32 33 34 35 36
戊子 己丑 庚寅 辛卯 壬辰 癸巳 甲午 己未 丙申 丁酉 戊戌 己亥
37 38 39 40 41 42 43 44 45 46 47 48
庚子 辛丑 壬寅 癸卯 甲辰 乙巳 丙午 丁未 戊申 己酉 庚戌 辛亥
49 50 51 52 53 54 55 56 57 58 59 60
壬子 癸丑 甲寅 乙卯 丙辰 丁巳 戊午 己未 庚申 辛酉 壬戌 癸亥
 

序号 1 2 3 4 5 6 7 8 9 10    
天干 甲 乙 丙 丁 戊 己 庚 申 壬 癸    
序号 1 2 3 4 5 6 7 8 9 10 11 12
地支 子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥
1894年是甲午年,那么1895年的天干是乙,依此类推,1900年的天干就是庚;同样,1894年的地支是午,1900年的地支就是子;所以1900年是庚子年。如果大家还想到1901年八国联军胁迫清政府签订了《辛丑条约》,就是1901年是辛丑年,那么天干与地支的序号都往前推一下,也可以推出来1900年是庚子年。(《辛丑条约》中的所涉及的赔款,因为是针对1900年(庚子年)的义和团运动而规定,所以也叫庚子赔款。)
如果没有告诉你相邻的某个年份是什么年,那么又怎样推算呢?比如,1861年用干支纪年应是?1984年用干支纪年应是?
这里有一个计算的公式:N=X-3-60m(0≦N﹤60,m是一个自然数)
N是60个干支的序号,比如N=1时就是甲子,X就是公元某某年。
那么按照这个公式,1861年的序号就是:1860-3-60m,那么就取m=29,这样N=58,如果取m=30的话,N=-2,这时就要加60,也就是说0≦N﹤60,如果N=0,那么就是第60个干支。现在知道与1861年对应干支是第58个,但是如果没有上面那个表格可供查阅,怎么办呢?我们知道天干是10个,地支是12个,10天干与12地支按顺序两两相配,那么第58号对应的天干的序号应是58÷10的余数,余数是8,第八个天干是申;同样,第58号对应的地支的序号是58÷12的余数,余数是10,第十个地支是酉,所以1861年是农历辛酉年。
所以天干的序号A=mod(N,10),地支的序号B= mod(N,12)
(大家就是对于m应该取多少,不用去想,很简单,就像小学生列除法算式一样,N-3那个数除以60,所得的商数就是m, 余数就是N)
注意:这里的公式只适用于公元后的年份
公元前的计算公式应是N=X-2-60m,(因为公元前1年后就是公元元年也就是公元1年,没有公元0年),(X就是一个负数了,m也取负数)
不过不知道这个公式是否准确。前面的公式N=X-3-60m来源于《简明天文学教程》 作 者: 余明 ;出版社: 科学出版社。本回答被提问者采纳
第2个回答  2021-07-14

提供一个ASP算法,

<%

function tuisuan(nian,yue,ri,shi,fen,miao,ngz,ygz,rgz,sgz,yinli,jiaojie)

dim tg(10)

dim dz(12)

dim jq(24)

tg(0)="甲"

tg(1)="乙"

tg(2)="丙"

tg(3)="丁"

tg(4)="戊"

tg(5)="己"

tg(6)="庚"

tg(7)="辛"

tg(8)="壬"

tg(9)="癸"'天干名称

dz(0)="子"

dz(1)="丑"

dz(2)="寅"

dz(3)="卯"

dz(4)="辰"

dz(5)="巳"

dz(6)="午"

dz(7)="未"

dz(8)="申"

dz(9)="酉"

dz(10)="戌"

dz(11)="亥"'地支名称

jq(0)="立春"

jq(1)="雨水"

jq(2)="惊蛰" 

jq(3)="春分" 

jq(4)="清明" 

jq(5)="谷雨" 

jq(6)="立夏" 

jq(7)="小满"

jq(8)="芒种"

jq(9)="夏至"

jq(10)="小暑"

jq(11)="大暑"

jq(12)="立秋" 

jq(13)="处暑" 

jq(14)="白露"

jq(15)="秋分" 

jq(16)="寒露" 

jq(17)="霜降" 

jq(18)="立冬"

jq(19)="小雪" 

jq(20)="大雪"

jq(21)="冬至"

jq(22)="小寒" 

jq(23)="大寒"'节气名称


shijian=nian&"-"&yue&"-"&ri&" "&shi&":"&fen&":"&miao

set fo=server.createobject("scripting.filesystemobject")

path=server.mappath("jieqi.txt")

set cal=fo.opentextfile(path)'读取24节气交节时刻表

tag=true 

i=0

while not cal.atendofstream and tag

str=cal.readline

strarr=split(str,",")

jieqi=strarr(1)&"-"&strarr(2)&"-"&strarr(3)&" "&strarr(4)&":"&strarr(5)&":"&strarr(6)

zhongqi=strarr(1)&"-"&strarr(2)&"-"&strarr(7)&" "&strarr(8)&":"&strarr(9)&":"&strarr(10)

if trim(strarr(1))=trim(nian) then

i=i+1

if datediff("d",shijian,jieqi)<=0 and datediff("d",shijian,zhongqi)>0 then

tag=false

gzyue=strarr(2)-1

if gzyue=0 then

gzyue=12

end if

if strarr(2)>=2 then

gznian=strarr(1)

else

gznian=strarr(1)-1

end if

jiaojie=jq((2*i+20)mod 24)&":"&jieqi&" "&jq(((2*i+20)mod 24)+1)&":"&zhongqi

elseif datediff("d",shijian,jieqi)>=0 and datediff("d",shijian,zhongqi)>=0 then

tag=false

gzyue=strarr(2)-2

if gzyue=0 then

gzyue=12

end if

if strarr(2)>=3 then

gznian=strarr(1)

else

gznian=strarr(1)-1

end if

end if

end if

if tag then

jiaojie=jq((2*i+20)mod 24)&":"&jieqi&" "&jq(((2*i+20)mod 24)+1)&":"&zhongqi

end if

wend

cal.close'获取当前日期相邻的两个交节时刻

……

sdz=shi+1

sdz=int(sdz/2)

sdz=sdz+1

if sdz>12 then

sdz=sdz-12

end if

stg=rtg*2+sdz-12

if stg>10 then

stg=stg-10

elseif stg<=0 then

stg=stg+10

end if

sgz=tg(stg-1)&dz(sdz-1)'推算时干支

end function

%>

来源:网页链接

第3个回答  2013-03-05
天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸

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

天干=(年份-3)/10……余数 余数为几就数几个
地支=(年份-3)/12……余数 同上
比如今年
(2013-3)/10……余数为0 数十个就是癸
(2013-3)/12……余数为6 数六个是巳
所以今年为癸巳年
第4个回答  2020-10-29

你知道天干地支纪年的计算方法吗

相似回答