fromBaZi static method
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;
}