fromBaZi static method

List<Solar> fromBaZi(
  1. String yearGanZhi,
  2. String monthGanZhi,
  3. String dayGanZhi,
  4. String timeGanZhi, {
  5. int sect = 2,
  6. int baseYear = 1900,
})

Implementation

static List<Solar> fromBaZi(String yearGanZhi, String monthGanZhi, String dayGanZhi, String timeGanZhi, {int sect = 2, int baseYear = 1900}) {
  sect = (1 == sect) ? 1 : 2;
  List<Solar> l = [];
  List<int> years = [];
  Solar today = Solar();

  int offsetYear = LunarUtil.getJiaZiIndex(today.getLunar().getYearInGanZhiExact()) - LunarUtil.getJiaZiIndex(yearGanZhi);
  if (offsetYear < 0) {
    offsetYear = offsetYear + 60;
  }
  int startYear = today.getYear() - offsetYear - 1;
  int minYear = baseYear - 2;
  while (startYear >= minYear) {
    years.add(startYear);
    startYear -= 60;
  }
  List<int> hours = [];
  IndexValue? timeZhi = LunarUtil.find(timeGanZhi, LunarUtil.ZHI);
  if (null != timeZhi) {
    hours.add((timeZhi.getIndex() - 1) * 2);
    if (1 == timeZhi.getIndex()) {
      hours.add(23);
    }
  }
  for (int hour in hours) {
    for (int y in years) {
      int maxYear = y + 3;
      int year = y;
      int month = 11;
      if (year < baseYear) {
        year = baseYear;
        month = 1;
      }
      Solar solar = Solar.fromYmdHms(year, month, 1, hour, 0, 0);
      while (solar.getYear() <= maxYear) {
        Lunar lunar = solar.getLunar();
        String dgz = (2 == sect) ? lunar.getDayInGanZhiExact2() : lunar.getDayInGanZhiExact();
        if (lunar.getYearInGanZhiExact() == yearGanZhi && lunar.getMonthInGanZhiExact() == monthGanZhi && dgz == dayGanZhi && lunar.getTimeInGanZhi() == timeGanZhi) {
          l.add(solar);
          break;
        }
        solar = solar.next(1);
      }
    }
  }
  return l;
}