山梦 发表于 2023-8-19 13:54:01

日柱1900-2200年算法(301年大全)

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

包 日柱.程序

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

    方法 日柱_法 <公开 静态 @禁止流程检查 = 真>
    {
      变量 天干数组 <类型 = "文本型 " 值 = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}>
      变量 地支数组 <类型 = "文本型 " 值 = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}>
      变量 A <类型 = "整数 "
                值 = {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}>
      变量 月 <类型 = "整数 " 值 = {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]

    }
}





山梦 发表于 2023-8-19 14:12:26

本帖最后由 山梦 于 2023-8-19 14:17 编辑

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



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


wyc00 发表于 2023-8-20 11:37:07

测试正确,年柱,月柱算法也发出来啊

山梦 发表于 2023-8-20 14:13:53

本帖最后由 山梦 于 2023-8-20 14:15 编辑

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

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




沉默流星 发表于 2023-8-20 14:34:30

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

可以啊
页: [1]
查看完整版本: 日柱1900-2200年算法(301年大全)