111,094
社区成员




无因而望得果无有是处
啥意思?
01.internal enum 天干 { 南無阿弥陀佛, 甲, 乙, 丙, 丁, 戊, 己, 庚, 辛, 壬, 癸 }
02.internal enum 地支 { 南無释迦牟尼佛, 子, 丑, 寅, 卯, 辰, 巳, 午, 未, 申, 酉, 戌, 亥 }
14. int 间隔天数 = (阳历日期.Date - new DateTime(2001, 1, 1)).Days % 60;
15. Func<List<int>, List<int>> 推算 = delegate(List<int> 数)
16. {
17. List<int> 干支值 = new List<int>();
18. 干偏移 = 间隔天数 % 10 + 数[0]; if (干偏移 > 10) 干偏移 -= 10;
19. 支偏移 = 间隔天数 % 12 + 数[1]; if (支偏移 > 12) 支偏移 -= 12;
20. 干支值.Add(干偏移); 干支值.Add(支偏移);
21. return 干支值;
22. };
23. List<int> 日干支值 = 间隔天数 >= 0 ? 推算(new List<int> { 1, 1 }) : 推算(new List<int> { 11, 13 });
24. 农历日干支 = ((天干)日干支值[0]).ToString() + ((地支)日干支值[1]).ToString() + "日";
25. int 小时数 = 阳历日期.Hour;
26. if (日干支值[0] > 5) 日干支值[0] -= 5;/*阳阴归类*/
27. 日干支值[0] *= 2; 日干支值[0] -= 1;/*归阳*/
28. int 时辰支 = 小时数 % 2 == 0 ? 小时数 / 2 + 1 : 小时数 / 2 + 2; if (时辰支 > 12) 时辰支 -= 12;
29. int 时辰干 = 日干支值[0] + 时辰支 - 1; if (时辰干 > 10) 时辰干 -= 10;
30. 农历时干支 = ((天干)时辰干).ToString() + ((地支)时辰支).ToString() + "时";
其中时干支算法推导后也很简单,主要把子时的推导出来后还按时辰顺序推演而且是天干内循环还重复,虽然看起来较为周折,但经推导后的算法公式还是很简单的.
阳阴五行的天干较规律和时辰推演一样算法即可.地支虽有一定规律但若写起归纳的算法来还不如直接写的简洁:
private enum 五行 { 南無观世音菩萨, 木, 火, 土, 金, 水 }
Func<int, int> 天干阳阴五行推算 = delegate(int 数)
{ return 数 % 2 == 0 ? 数 / 2 : 数 / 2 + 1; };
Func<int, int> 地支阳阴五行推算 = delegate(int 数)
{
if (数 == 3 || 数 == 4) return 1;
else if (数 == 6 || 数 == 7) return 2;
else if (数 == 9 || 数 == 10) return 4;
else if (数 == 1 || 数 == 12) return 5;
else return 3;
};
纳音五行没什么规律可言况每行的名称也是不同的,因此采用同样的2归1简洁算法外直接枚举就是了:
private enum 五行 { 南無观世音菩萨, 木, 火, 土, 金, 水 }
private enum 纳音五行 { 海中金, 炉中火, 大林木, 路旁土, 剑锋金, 山头火, 涧下水, 城墙土, 白腊金, 杨柳木, 泉中水, 屋上土, 霹雷火, 松柏木, 长流水, 沙中金, 山下火, 平地木, 壁上土, 金箔金, 佛光火, 天河水, 大驿土, 钗钏金, 桑松木, 大溪水, 沙中土, 天上火, 石榴木, 大海水 }
五行推算 推算 = new 五行推算();
string 阳阴五行 = ((五行)推算.干阳阴(年天干)).ToString() + ((五行)推算.支阳阴(年地支)).ToString();
string 纳音五行 = "\r\n纳音五行:" + ((纳音五行)推算.纳音五行(甲子60数)).ToString() + "。";
private class 五行推算
{
internal int 干阳阴(int 值)
{ return 值 % 2 == 0 ? 值 / 2 : 值 / 2 + 1; }
internal int 支阳阴(int 值)
{
if (值 == 3 || 值 == 4) return 1;
else if (值 == 6 || 值 == 7) return 2;
else if (值 == 9 || 值 == 10) return 4;
else if (值 == 1 || 值 == 12) return 5;
else return 3;
}
internal string 字符串去重(string 字符)
{ return new string(字符.ToArray().Distinct().ToArray()); }
internal string 字符串去复(string 元字符, string 字符)
{ return new string(元字符.ToArray().Except(字符.ToArray()).ToArray()); }
internal int 纳音五行(int 值)
{ return 值 % 2 == 0 ? 值 / 2 - 1: 值 / 2; }
}
至此感兴趣的算法演练就此为止,最后看看今天更正算法核对正确后的运行结果:
-------------------------------------------
公历→农历
2013年06月08日
双子座
二〇一三年五月初一
癸巳〖蛇〗 戊午月 乙巳日 甲申时
今属:木;五行:水火土木金;缺:。
纳音五行:长流水。