getSoulAndBody function
获取命宫以及身宫数据
- 定寅首
- 甲己年生起丙寅,乙庚年生起戊寅,
- 丙辛年生起庚寅,丁壬年生起壬寅,
- 戊癸年生起甲寅。
- 安命身宫诀
- 寅起正月,顺数至生月,逆数生时为命宫。
- 寅起正月,顺数至生月,顺数生时为身宫。
@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);
}