public string getShenGong() { int monthZhiIndex = 0; int timeZhiIndex = 0; for (int i = 0, j = MONTH_ZHI.Length; i < j; i++) { string zhi = MONTH_ZHI[i]; if (lunar.getMonthZhiExact().Equals(zhi)) { monthZhiIndex = i; } if (lunar.getTimeZhi().Equals(zhi)) { timeZhiIndex = i; } } int zhiIndex = (2 + (monthZhiIndex + timeZhiIndex)) % 12; int jiaZiIndex = LunarUtil.getJiaZiIndex(lunar.getMonthInGanZhiExact()) - (monthZhiIndex - zhiIndex); if (jiaZiIndex >= 60) { jiaZiIndex -= 60; } if (jiaZiIndex < 0) { jiaZiIndex += 60; } return(LunarUtil.JIA_ZI[jiaZiIndex]); }
/// <summary> /// 起运计算 /// </summary> private void computeStart() { JieQi prev = lunar.getPrevJie(); JieQi next = lunar.getNextJie(); Solar current = lunar.getSolar(); Solar start = forward ? current : prev.getSolar(); Solar end = forward ? next.getSolar() : current; int hourDiff = LunarUtil.getTimeZhiIndex(end.toYmdHms().Substring(11, 5)) - LunarUtil.getTimeZhiIndex(start.toYmdHms().Substring(11, 5)); DateTime endCalendar = new DateTime(end.getYear(), end.getMonth(), end.getDay(), 0, 0, 0, 0); DateTime startCalendar = new DateTime(start.getYear(), start.getMonth(), start.getDay(), 0, 0, 0, 0); int dayDiff = endCalendar.Subtract(startCalendar).Days; if (hourDiff < 0) { hourDiff += 12; dayDiff--; } int monthDiff = hourDiff * 10 / 30; int month = dayDiff * 4 + monthDiff; int day = hourDiff * 10 - monthDiff * 30; int year = month / 12; month = month - year * 12; this.startYear = year; this.startMonth = month; this.startDay = day; }
/// <summary> /// 获取干支 /// </summary> /// <returns>干支</returns> public string getGanZhi() { int offset = LunarUtil.getJiaZiIndex(lunar.getJieQiTable()["立春"].getLunar().getYearInGanZhiExact()) + this.index; if (daYun.getIndex() > 0) { offset += daYun.getStartAge() - 1; } offset %= LunarUtil.JIA_ZI.Length; return(LunarUtil.JIA_ZI[offset]); }
/// <summary> /// 通过农历年月日时初始化 /// </summary> /// <param name="lunarYear">年(农历)</param> /// <param name="lunarMonth">月(农历),1到12,闰月为负,即闰2月=-2</param> /// <param name="lunarDay">日(农历),1到31</param> /// <param name="hour">小时(阳历)</param> /// <param name="minute">分钟(阳历)</param> /// <param name="second">秒钟(阳历)</param> public Lunar(int lunarYear, int lunarMonth, int lunarDay, int hour, int minute, int second) { this.year = lunarYear; this.month = lunarMonth; this.day = lunarDay; this.hour = hour; this.minute = minute; this.second = second; dayOffset = LunarUtil.computeAddDays(year, month, day); this.solar = toSolar(); compute(); }
private void LoadHuangLi() { var good = new List <ListItem>(); var bad = new List <ListItem>(); CommUtils.getTableItemArray(ref good, ref bad); GoodListBox.ItemsSource = good; BadListBox.ItemsSource = bad; var f = CommUtils.getFortune(); var ls = CommUtils.getFortune(f); int i = new Random(DateTime.Now.Millisecond).Next(54); dateTextBlock.Text = DateTime.Now + " " + CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(DateTime.Now.DayOfWeek); ndateTextBlock.Text = LunarUtil.GetLunarDay(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); jxTextBlock.Text = ls; }
/// <summary> /// 获取干支 /// </summary> /// <returns>干支</returns> public string getGanZhi() { int offset = LunarUtil.getJiaZiIndex(lunar.getTimeInGanZhi()); int add = this.index + 1; if (daYun.getIndex() > 0) { add += daYun.getStartAge() - 1; } offset += forward ? add : -add; int size = LunarUtil.JIA_ZI.Length; while (offset < 0) { offset += size; } offset %= size; return(LunarUtil.JIA_ZI[offset]); }
/// <summary> /// 获取干支 /// </summary> /// <returns>干支</returns> public string getGanZhi() { if (index < 1) { return(""); } int offset = LunarUtil.getJiaZiIndex(lunar.getMonthInGanZhiExact()); offset += yun.isForward() ? index : -index; int size = LunarUtil.JIA_ZI.Length; if (offset >= size) { offset -= size; } if (offset < 0) { offset += size; } return(LunarUtil.JIA_ZI[offset]); }
/// <summary> /// 干支纪时计算 /// </summary> private void computeTime() { timeZhiIndex = LunarUtil.getTimeZhiIndex((hour < 10 ? "0" : "") + hour + ":" + (minute < 10 ? "0" : "") + minute); timeGanIndex = timeZhiIndex % 10; }
/// <summary> /// 通过阳历日期初始化 /// </summary> /// <param name="date">阳历日期</param> public Lunar(DateTime date) { solar = new Solar(date); int y = solar.getYear(); int m = solar.getMonth(); int d = solar.getDay(); int startYear, startMonth, startDay; int lunarYear, lunarMonth, lunarDay; if (y < 2000) { startYear = SolarUtil.BASE_YEAR; startMonth = SolarUtil.BASE_MONTH; startDay = SolarUtil.BASE_DAY; lunarYear = LunarUtil.BASE_YEAR; lunarMonth = LunarUtil.BASE_MONTH; lunarDay = LunarUtil.BASE_DAY; } else { startYear = SolarUtil.BASE_YEAR + 99; startMonth = 1; startDay = 1; lunarYear = LunarUtil.BASE_YEAR + 99; lunarMonth = 11; lunarDay = 25; } int diff = 0; for (int i = startYear; i < y; i++) { diff += 365; if (SolarUtil.isLeapYear(i)) { diff += 1; } } for (int i = startMonth; i < m; i++) { diff += SolarUtil.getDaysOfMonth(y, i); } diff += d - startDay; lunarDay += diff; int lastDate = LunarUtil.getDaysOfMonth(lunarYear, lunarMonth); while (lunarDay > lastDate) { lunarDay -= lastDate; lunarMonth = LunarUtil.nextMonth(lunarYear, lunarMonth); if (lunarMonth == 1) { lunarYear++; } lastDate = LunarUtil.getDaysOfMonth(lunarYear, lunarMonth); } year = lunarYear; month = lunarMonth; day = lunarDay; hour = solar.getHour(); minute = solar.getMinute(); second = solar.getSecond(); dayOffset = LunarUtil.computeAddDays(year, month, day); compute(); }
/// <summary> /// 通过八字获取阳历列表 /// </summary> /// <param name="yearGanZhi">年柱</param> /// <param name="monthGanZhi">月柱</param> /// <param name="dayGanZhi">日柱</param> /// <param name="timeGanZhi">时柱</param> /// <returns>符合的阳历列表</returns> public static List <Solar> fromBaZi(string yearGanZhi, string monthGanZhi, string dayGanZhi, string timeGanZhi) { List <Solar> l = new List <Solar>(); Solar today = new Solar(); Lunar lunar = today.getLunar(); int offsetYear = LunarUtil.getJiaZiIndex(lunar.getYearInGanZhiExact()) - LunarUtil.getJiaZiIndex(yearGanZhi); if (offsetYear < 0) { offsetYear = offsetYear + 60; } int startYear = today.getYear() - offsetYear; int hour = 0; string timeZhi = timeGanZhi.Substring(1); for (int i = 0, j = LunarUtil.ZHI.Length; i < j; i++) { if (LunarUtil.ZHI[i].Equals(timeZhi)) { hour = (i - 1) * 2; } } while (startYear >= SolarUtil.BASE_YEAR - 1) { int year = startYear - 1; int counter = 0; int month = 12; int day; bool found = false; while (counter < 15) { if (year >= SolarUtil.BASE_YEAR) { day = 1; if (year == SolarUtil.BASE_YEAR && month == SolarUtil.BASE_MONTH) { day = SolarUtil.BASE_DAY; } Solar solar = Solar.fromYmdHms(year, month, day, hour, 0, 0); lunar = solar.getLunar(); if (lunar.getYearInGanZhiExact().Equals(yearGanZhi) && lunar.getMonthInGanZhiExact().Equals(monthGanZhi)) { found = true; break; } } month++; if (month > 12) { month = 1; year++; } counter++; } if (found) { counter = 0; month--; if (month < 1) { month = 12; year--; } day = 1; if (year == SolarUtil.BASE_YEAR && month == SolarUtil.BASE_MONTH) { day = SolarUtil.BASE_DAY; } Solar solar = Solar.fromYmdHms(year, month, day, hour, 0, 0); while (counter < 61) { lunar = solar.getLunar(); if (lunar.getYearInGanZhiExact().Equals(yearGanZhi) && lunar.getMonthInGanZhiExact().Equals(monthGanZhi) && lunar.getDayInGanZhiExact().Equals(dayGanZhi) && lunar.getTimeInGanZhi().Equals(timeGanZhi)) { l.Add(solar); break; } solar = solar.next(1); counter++; } } startYear -= 60; } return(l); }
/// <summary> /// 获取旬空(空亡) /// </summary> /// <returns>旬空(空亡)</returns> public string getXunKong() { return(LunarUtil.getXunKong(getGanZhi())); }