递归火山软件开发平台

标题: 日柱1900-2200年算法(301年大全) [打印本页]

作者: 山梦    时间: 2023-8-19 13:54
标题: 日柱1900-2200年算法(301年大全)
日柱1900-2200年算法(301年大全)
----------------------------------------------------------
八字四柱中算”日柱”算法最难,网络上查找也不全面,有些1900年算错的,2100年后又没有了。
下面是其中的一种
----------------------------------------------------------
<火山程序 类型 = "通常" 版本 = 1 />

包 日柱.程序

类 日柱_类 <公开 @全局类 = 真>
{
    变量 日柱天干 <公开 静态 类型 = 文本型>
    变量 日柱地支 <公开 静态 类型 = 文本型>

    方法 日柱_法 <公开 静态 @禁止流程检查 = 真>
    {
        变量 天干数组 <类型 = "文本型 [10]" 值 = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}>
        变量 地支数组 <类型 = "文本型 [12]" 值 = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}>
        变量 A <类型 = "整数 [301]"
                值 = {9,14,19,21,30,35,40,45,51,56,1,6,12,17,22,27,33,38,43,48,54,59,4,9,15,20,25,30,36,41,46,51,57,2,7,12,18,23,28,33,39,44,49,54,0,5,10,15,21,26,31,36,42,47,52,57,3,8,13,18,24,29,34,39,45,50,55,0,6,11,16,21,27,32,37,42,48,53,58,3,9,14,19,24,30,35,40,45,51,56,1,6,12,17,22,27,33,38,43,48,54,59,4,9,15,20,25,30,36,41,46,51,57,2,7,12,18,23,28,33,39,44,49,54,0,5,10,15,21,26,31,36,42,47,52,57,3,8,13,18,24,29,34,39,45,50,55,0,6,11,16,21,27,32,37,42,48,53,58,3,9,14,19,24,30,35,40,45,51,56,1,6,12,17,22,27,33,38,43,48,54,59,4,9,15,20,25,30,36,41,46,51,57,2,7,12,18,23,28,33,38,43,48,53,59,4,9,14,20,25,30,35,41,46,51,56,2,7,12,17,23,28,33,38,44,49,54,59,5,10,15,20,26,31,36,41,47,52,57,2,8,13,18,23,29,34,39,44,50,55,0,5,11,16,21,26,32,37,42,47,53,58,3,8,14,19,24,29,23,40,45,50,56,1,6,11,17,22,27,32,38,43,48,53,59,4,9,14,20,25,30,35,41,46,51,56,2,7,12,17,22}>
        变量 月 <类型 = "整数 [12]" 值 = {6,37,0,31,1,32,2,33,4,34,5,35}>
        变量 年系数 <类型 = 整数>
        变量 日柱系数 <类型 = 整数>
        变量 日干数 <类型 = 整数>
        变量 日支数 <类型 = 整数>
        如果 (公历年 == 1900 && 公历月 < 3)
        {
            年系数 = 4
        }
        否则
        {
            如果 (公历月 < 3)
            {
                年系数 = A [公历年 - 1900 - 1]
            }
            否则
            {
                年系数 = A [公历年 - 1900]
            }
        }
        日柱系数 = 年系数 + 月 [公历月 - 1] + 公历日
        如果 (日柱系数 > 60)
        {
            日柱系数 = 日柱系数 - 60
        }
        否则
        {
            日柱系数 = 日柱系数
        }
        如果 (日柱系数 > 10)
        {
            日干数 = 日柱系数 % 10
        }
        否则
        {
            日干数 = 日柱系数
        }
        如果真 (日干数 == 0)
        {
            日干数 = 10
        }
        如果 (日柱系数 > 12)
        {
            日支数 = 日柱系数 % 12
        }
        否则
        {
            日支数 = 日柱系数
        }
        如果真 (日支数 == 0)
        {
            日支数 = 12
        }
        日柱天干 = 天干数组 [日干数 - 1]
        日柱地支 = 地支数组 [日支数 - 1]

    }
}

(, 下载次数: 21)

(, 下载次数: 26)


作者: 山梦    时间: 2023-8-19 14:12
本帖最后由 山梦 于 2023-8-19 14:17 编辑

这是日柱的另一种算法,这种算法的好处是,知道公纪开始年元月元日的天干地支,自己修改下数字,就可以算出100年。其中“主窗口.Gy”,是指公历年!  
主窗口.Gd 是公历日
主窗口.Gm 是公历月
公历数据_类.公历_每月总天数→是公历月数累加:31,59,90……
(, 下载次数: 20)


------------------------------------------------------------
以上算法对错,望大佬指导订正



作者: wyc00    时间: 2023-8-20 11:37
测试正确,年柱,月柱算法也发出来啊
作者: 山梦    时间: 2023-8-20 14:13
本帖最后由 山梦 于 2023-8-20 14:15 编辑

年柱算法很简单的。我这种算法,直接用农历年来算了。公历年另外算,也很简单的-----------------------------------------------------------
<火山程序 类型 = "通常" 版本 = 1 />
变量 天干数组 <公开 静态 类型 = "文本型 [12]" 值 = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸","甲","乙"}>
变量 地支数组 <公开 静态 类型 = "文本型 [14]" 值 = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥","子","丑"}>
<火山程序 类型 = "通常" 版本 = 1 />

变量 年柱 <类型 = 整数>
变量 年支 <类型 = 整数>
// -----年柱--------
年柱 = (农历年 - 3) % 10
如果真 (年柱 == 0)
{
    年柱 = 10
}
年柱天干 = 天干数组 [年柱 - 1]
年支 = (农历名 - 3) % 12
如果真 (年支 == 0)
{
    年支 = 12
}
年柱地支 = 地支数组 [年支 - 1]
-------------------------------------
月柱算法要根据  24节气中的“节”来确定 农历月。玄学的一般都是以节中的“立春”为正月,地支为寅。”惊蛰“为二月,地支为”卯“……以此类推,再用”五遁法“算出干。





作者: 沉默流星    时间: 2023-8-20 14:34
山梦 发表于 2023-8-20 14:13
年柱算法很简单的。我这种算法,直接用农历年来算了。公历年另外算,也很简单的-------------------------- ...

可以啊




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4