Пример #1
0
        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]);
        }
Пример #2
0
        /// <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;
        }
Пример #3
0
        /// <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]);
        }
Пример #4
0
 /// <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;
        }
Пример #6
0
        /// <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]);
        }
Пример #7
0
        /// <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]);
        }
Пример #8
0
 /// <summary>
 /// 干支纪时计算
 /// </summary>
 private void computeTime()
 {
     timeZhiIndex = LunarUtil.getTimeZhiIndex((hour < 10 ? "0" : "") + hour + ":" + (minute < 10 ? "0" : "") + minute);
     timeGanIndex = timeZhiIndex % 10;
 }
Пример #9
0
        /// <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();
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
 /// <summary>
 /// 获取旬空(空亡)
 /// </summary>
 /// <returns>旬空(空亡)</returns>
 public string getXunKong()
 {
     return(LunarUtil.getXunKong(getGanZhi()));
 }