using Lunar.Util; // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedAutoPropertyAccessor.Global namespace Lunar.EightChar { /// /// 运 /// public class Yun { /// /// 性别(1男,0女) /// public int Gender { get; } /// /// 起运年数 /// public int StartYear { get; } /// /// 起运月数 /// public int StartMonth { get; } /// /// 起运天数 /// public int StartDay { get; } /// /// 起运小时 /// public int StartHour { get; } /// /// 是否顺推 /// public bool Forward { get; } /// /// 阴历 /// public Lunar Lunar { get; } /// /// 创建运 /// /// 八字 /// 性别 /// 流派 public Yun(EightChar eightChar, int gender, int sect = 1) { Lunar = eightChar.Lunar; Gender = gender; var yang = 0 == Lunar.YearGanIndexExact % 2; var man = 1 == gender; Forward = (yang && man) || (!yang && !man); // 起运计算 var prev = Lunar.GetPrevJie(); var next = Lunar.GetNextJie(); var current = Lunar.Solar; var start = Forward ? current : prev.Solar; var end = Forward ? next.Solar : current; int year; int month; int day; var hour = 0; if (2 == sect) { var minutes = end.SubtractMinute(start); var y = minutes / 4320; minutes -= y * 4320; var m = minutes / 360; minutes -= m * 360; var d = minutes / 12; minutes -= d * 12; var h = minutes * 2; year = y; month = m; day = d; hour = h; } else { var endTimeZhiIndex = (end.Hour == 23) ? 11 : LunarUtil.GetTimeZhiIndex(end.YmdHms.Substring(11, 5)); var startTimeZhiIndex = (start.Hour == 23) ? 11 : LunarUtil.GetTimeZhiIndex(start.YmdHms.Substring(11, 5)); // 时辰差 var hourDiff = endTimeZhiIndex - startTimeZhiIndex; var dayDiff = end.Subtract(start); if (hourDiff < 0) { hourDiff += 12; dayDiff--; } var monthDiff = hourDiff * 10 / 30; month = dayDiff * 4 + monthDiff; day = hourDiff * 10 - monthDiff * 30; year = month / 12; month = month - year * 12; } StartYear = year; StartMonth = month; StartDay = day; StartHour = hour; } /// /// 获取起运的阳历日期 /// /// 阳历日期 public Solar StartSolar { get { var solar = Lunar.Solar; solar = solar.NextYear(StartYear); solar = solar.NextMonth(StartMonth); solar = solar.Next(StartDay); return solar.NextHour(StartHour); } } /// /// 获取大运 /// /// 轮数 /// 大运 public DaYun[] GetDaYun(int n = 10) { var l = new DaYun[n]; for (var i = 0; i < n; i++) { l[i] = new DaYun(this, i); } return l; } } }