Esempio n. 1
0
        /// <summary>
        /// 计算干支纪年
        /// </summary>
        private void computeYear()
        {
            yearGanIndex = (year + LunarUtil.BASE_YEAR_GANZHI_INDEX) % 10;
            yearZhiIndex = (year + LunarUtil.BASE_YEAR_GANZHI_INDEX) % 12;

            //以立春作为新一年的开始的干支纪年
            int g = yearGanIndex;
            int z = yearZhiIndex;

            //精确的干支纪年,以立春交接时刻为准
            int gExact = yearGanIndex;
            int zExact = yearZhiIndex;

            if (year == solar.getYear())
            {
                //获取立春的阳历时刻
                Solar liChun = jieQi["立春"];
                //立春日期判断
                if (solar.toYmd().CompareTo(liChun.toYmd()) < 0)
                {
                    g--;
                    if (g < 0)
                    {
                        g += 10;
                    }
                    z--;
                    if (z < 0)
                    {
                        z += 12;
                    }
                }
                //立春交接时刻判断
                if (solar.toYmdhms().CompareTo(liChun.toYmdhms()) < 0)
                {
                    gExact--;
                    if (gExact < 0)
                    {
                        gExact += 10;
                    }
                    zExact--;
                    if (zExact < 0)
                    {
                        zExact += 12;
                    }
                }
            }
            yearGanIndexByLiChun = g;
            yearZhiIndexByLiChun = z;

            yearGanIndexExact = gExact;
            yearZhiIndexExact = zExact;
        }
Esempio n. 2
0
        /**
         * 干支纪月计算
         */
        private void computeMonth()
        {
            Solar start = null;
            Solar end;
            //干偏移值(以立春当天起算)
            int gOffset = ((yearGanIndexByLiChun % 5 + 1) * 2) % 10;
            //干偏移值(以立春交接时刻起算)
            int gOffsetExact = ((yearGanIndexExact % 5 + 1) * 2) % 10;

            //序号:大雪到小寒之间-2,小寒到立春之间-1,立春之后0
            int index = -2;

            foreach (string jie in LunarUtil.JIE)
            {
                end = jieQi[jie];
                string ymd  = solar.toYmd();
                string symd = null == start ? ymd : start.toYmd();
                string eymd = end.toYmd();
                if (ymd.CompareTo(symd) >= 0 && ymd.CompareTo(eymd) < 0)
                {
                    break;
                }
                start = end;
                index++;
            }
            if (index < 0)
            {
                index += 12;
            }

            monthGanIndex = (index + gOffset) % 10;
            monthZhiIndex = (index + LunarUtil.BASE_MONTH_ZHI_INDEX) % 12;

            //序号:大雪到小寒之间-2,小寒到立春之间-1,立春之后0
            int indexExact = -2;

            foreach (string jie in LunarUtil.JIE)
            {
                end = jieQi[jie];
                string time  = solar.toYmdhms();
                string stime = null == start ? time : start.toYmdhms();
                string etime = end.toYmdhms();
                if (time.CompareTo(stime) >= 0 && time.CompareTo(etime) < 0)
                {
                    break;
                }
                start = end;
                indexExact++;
            }
            if (indexExact < 0)
            {
                indexExact += 12;
            }
            monthGanIndexExact = (indexExact + gOffsetExact) % 10;
            monthZhiIndexExact = (indexExact + LunarUtil.BASE_MONTH_ZHI_INDEX) % 12;
        }