getSoulAndBody function

SoulAndBody getSoulAndBody(
  1. String solarDate,
  2. int timeIndex,
  3. bool? fixLeap
)

获取命宫以及身宫数据

  1. 定寅首
  • 甲己年生起丙寅,乙庚年生起戊寅,
  • 丙辛年生起庚寅,丁壬年生起壬寅,
  • 戊癸年生起甲寅。
  1. 安命身宫诀
  • 寅起正月,顺数至生月,逆数生时为命宫。
  • 寅起正月,顺数至生月,顺数生时为身宫。

@param solarDate 公历日期,用公历日期比较方便,因为农历日期需要考虑闰月问题,如果得到的数据是农历,可以用 lunar2solar 方法得到公历日期 @param timeIndex 出生时索引 @param fixLeap 是否修正闰月,若修正,则闰月前15天按上月算,后15天按下月算 @returns SoulAndBody

Implementation

SoulAndBody getSoulAndBody(String solarDate, int timeIndex, bool? fixLeap) {
  final heavenlyStemEarthlyBranch = getHeavenlyStemAndEarthlyBranchSolarDate(
      solarDate, timeIndex, getConfig().yearDivide);
  final earthlyBranchOfTime =
      getMyEarthlyBranchNameFrom(heavenlyStemEarthlyBranch.hourly[1]);
  final heavenlyStemOfYear =
      getMyHeavenlyStemNameFrom(heavenlyStemEarthlyBranch.yearly[0]);

  // 紫薇斗数以寅宫位第一个宫位
  final firstIndex = earthlyBranches.indexOf('yinEarthly');
  final monthIndex = fixLunarMonthIndex(solarDate, timeIndex, fixLeap);

  // 命宫索引,以寅宫为0,顺时针数到生月地支索引,再逆时针数到生时地支索引
  // 此处数到生月地支索引其实就是农历月份,所以不再计算生月地支索引
  final soulIndex =
      fixIndex(monthIndex - earthlyBranches.indexOf(earthlyBranchOfTime.key));
// 身宫索引,以寅宫为0,顺时针数到生月地支索引,再顺时针数到生时地支索引
  // 与命宫索引一样,不再赘述
  final bodyIndex =
      fixIndex(monthIndex + earthlyBranches.indexOf(earthlyBranchOfTime.key));

  // 用五虎盾取得寅宫的天干
  final startHevenlyStem = tigerRules[heavenlyStemOfYear.key];
  // 获取命宫天干索引,起始天干索引加上命宫的索引即是
  final heavenlyStemOfSoulIndex =
      fixIndex(heavenlyStems.indexOf(startHevenlyStem!) + soulIndex, max: 10);
  // 命宫的天干
  final heavenlyStemOfSoul =
      getMyHeavenlyStemNameFrom(heavenlyStems[heavenlyStemOfSoulIndex]);

  // 命宫的地支
  final earthlyBranchOfSoul = getMyEarthlyBranchNameFrom(
      earthlyBranches[fixIndex(soulIndex + firstIndex)]);

  return SoulAndBody(
      soulIndex: soulIndex,
      bodyIndex: bodyIndex,
      heavenlyStenName: heavenlyStemOfSoul,
      earthlyBranchName: earthlyBranchOfSoul);
}