年的干支
方法一:
首先要能记住十大天干和十二地支,十天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸;十二地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥;
天干地支纪年法首先是天干在前,地支在后,比如今年2005就为-乙酉年。
天干算法:
2的10次方:1024 2的11次方:2048 2的12次方:4096 2的13次方:8192 2的14次方:16384 2的15次方:32768 2的16次方:65536 2的17次方:131072 2的18次方:262144 2的19次方:524288 2的20次方:1048576 2的
4、 5、 6、 7、 8、 9、 0、 1、 2、 3 对应的十天干就是
甲、乙、丙、丁、戊、己、庚、辛、壬、癸。
数字为年代的最后的一位数字,比如2005年,最后一位是5,对应的天干就是乙;
2的45次为35184372088832 希望可以解决你的困惑!
地支的算法:用年代数除以12,后面的余数就代表某个地支。
余数分别为:4、 5、 6、 7、 8、 9、 10、 11、 0(能整除)、1、 2、3。
代表地支为:子、丑、寅、卯、辰、巳、午、 未、 申、酉、戌、亥。
比如2005年为例:年代末尾数为5,对应的天干为乙,2005除以12,余数为1,2的45次方等于多少亿,对应的地支为酉,所以2005年为乙酉年。
方法二:
对应数字:1、 2、 3、 4、 5、 6、 7、 8、 9、 0
相应天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸
对应数字:1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 0
相应地支:子、丑、寅、卯、辰、巳、午、 未、 申、 酉、 戌、 亥
公元年份-3,除以10得余数可得天干,如1984年,(1984-3)|10=1所以天干为甲;
公元年份-3,除以12得余数可得地支,如1984年,(1984-3)|12=1所以地支为子;
所以公元1984年为甲子年。
方法三:
用一个你知道的年份的天干地支来推算,比如用2006年算1955年的天干地支,先要知道2006年是丙戌年,用2006-1955=51,再用51除以10,余数为1,表明天干是丙往前推一位,答案是乙,接着用51除以12,余数为3,表明地支是戌往前推三位,答案是未,那么1955年就是乙未年。
方法四:
查表法,前提是你要有个六十甲子表
六十甲子表
1 甲子 13 丙子 25 戊子 37 庚子 49 壬子
2 乙丑 14 丁丑 26 己丑 38 辛丑 50 癸丑
3 丙寅 15 戊寅 27 庚寅 39 壬寅 51 甲寅
4 丁卯 16 已卯 28 辛卯 40 癸卯 52 乙卯
5 戊辰 17 庚辰 29 壬辰 41 甲辰 53 丙辰
6 已巳 18 辛巳 30 癸巳 42 乙巳 54 丁巳
2的45次方等于
7 庚午 19 壬午 31 甲午 43 丙午 55 戊午
8 辛未 20 癸未 32 乙未 44 丁未 56 已未
根据冥的运算规则,3的30次方可以写成3的平方的15次方的形式;2的45次方可以写成2的3次方的15次方的形式。我们知道,3的平方是9。因此,3的平方的15次方也就是9的15次方。而2的3次方是8。故而2的3次方的15次方就是8。
9 壬申 21 甲申 33 丙申 45 戊申 57 庚申
10 癸酉 22 乙酉 34 丁酉 46 已酉 58 辛酉
11 甲戌 23 丙戌 35 戊戌 47 庚戌 59 壬戌
12 乙亥 24 丁亥 36 已亥 48 辛亥 60 癸亥
3,比如,2008年:2008-3=2005,2005÷60,余数为25,查六十年甲子(干支表)25号干支,得知是戊子年。
4,比如,求1991年干支:1991÷60=33余11,年干支序号数=11-3=8。查干支表知该年为辛未年。 (如能诀六十甲子表就太好了)
月的干支
月的地支是固定不变的:正月是寅,二月是卯,三月是子,依次类推.....
月的天干记忆比较简单,只要在你年干的基础上记住几句歌诀就可以了:
甲己之年丙做首;乙庚之年卯为头;
丙辛必定寻庚起;丁壬壬位顺流行;
还有戊癸何方觅,甲定之上好追求。
意思就是说,若遇甲或己的年份 ,正月是丙寅;遇上乙或庚之年,正月为戊寅;遇上丙或辛之年,正月为庚寅;遇上丁或壬之年,正月为壬寅;遇上戊或癸之年,正月为甲寅。依照正月之干支,其余月份按干支推算即可。有表如下:
年份 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
甲、巳 丙寅 丁卯 戊辰 己巳 庚午 辛未 壬申 癸酉 甲戌 乙亥 丙子 丁丑
乙、庚 戊寅 己卯 庚辰 辛巳 壬午 癸未 甲申 乙酉 丙戌 丁亥 戊子 己丑
丙、辛 庚寅 辛卯 壬辰 癸巳 甲午 乙未 丙申 丁酉 戊戌 己亥 庚子 辛丑
丁、壬 壬寅 癸卯 甲辰 乙巳 丙午 丁未 戊申 己酉 庚戌 辛亥 壬子 癸丑
戊、癸 甲寅 乙卯 丙辰 丁巳 戊午 己未 庚申 辛酉 壬戌 癸亥 甲子 乙丑
日的干支
我们都知道,日的干支,甲子为第一日,乙丑为第二日,丙寅为第三日……60日为一周。一周完了再由甲子日起,周而复始,循环下去。例如农历己巳年(1989年)正月初一是丁酉日,初二是戊戌日……到三月初七正好是60天,因此三月初二又是丁酉日。
找日干支的方法最多,但都是比较有挑战性的。有机会我会同大家分享下!当然最简单的就是查万年历了!
时的干支
时的地支是固定的,这个就不多说了。
时的天干由日天干也可轻易得到:
甲己还生甲,乙庚丙作初
丙辛从戊起,丁壬庚子居。
戊癸何方发,壬子是真途 即若该日是甲或己的,在子时上配上甲为甲子;该日是乙或庚的,在子时上配上丙为丙子;丙辛日子时配上戊为戊子;丁壬日为庚子;戊癸日为壬子。知道了子时的天支,便可推知其余。
示例代码:
const unsigned char sky[][3]= {&34;,&34;,&34;,&34;,&34;,&34;,&34;,&34;,&34;,&34;,};
** 函数名称:GetSkyEarth
** 功能描述:输入公历日期得到一个甲子年(只允许2000-2099年)
** 输入: year 公历年
** p
**------------------------------------------------------------------------------------------------------
********************************************************************************************************
void GetSkyEarth(unsigned char year,unsigned char *p)
{
year += 16;
2的64次方:18446744073709551616 这个数有点大,计算器一般算不出来,编程的话用long值才能计算到2的62次方,但用windows自带的计算器用科学型按'2'‘x^y’‘64’还是可以计算的。
year %= 60;
*p=year;
}
void StrCopy(char *target,unsigned char *source,unsigned char no)
{
unsigned char i;
for(i=0;i<no;i++)
{
*target++=*source++;
}
}
void testSkyEarth(void)
{
unsigned char SEyear;
unsigned char skyBuf[2];
unsigned char earthBuf[2];
unsigned char shengxiaoBuf[2];
GetSkyEarth(18,&SEyear); //2018 ,result: sEyear = 34;
StrCopy(skyBuf,(unsigned char *) sky[SEyear%10],2); // 戊
StrCopy(earthBuf,(unsigned char *)earth[SEyear%12],2); // 戌
StrCopy(shengxiaoBuf,(unsigned char *)shengxiao[SEyear%12],2); // 狗
}
/即2018年为戊戌狗年