Esempio n. 1
0
        /// <summary>
        /// 获取本实例日期值是否正值某一节气日期。
        /// </summary>
        /// <returns>如果正好在某一节气上,返回节气信息,否则返回null</returns>
        public string GetSolarTermInfo(DateTime Value)
        {
            try
            {
                string      returnValue = "";
                int         y           = Value.Year;
                string      ds          = Value.ToString("yyyy-MM-dd");
                SolarTerm24 t           = new SolarTerm24(SolarTerm24Types.XiaoHan); //公历1月份第一个节气为小寒
                int         n           = Value.Month - 1;
                SolarTerm24 t1          = t.Inc(2 * n);                              //每个公历月上有2个节气 ,该月第一个节气
                DateTime    d1          = CalendarUtil.GetSolarTermDateTime(y, t1.ID);
                if (ds == d1.ToString("yyyy-MM-dd"))
                {
                    solarTermInfo = new HFDateSolarTermInfo(t1.ID, d1);
                }
                SolarTerm24 t2 = new SolarTerm24();

                SolarTerm24 t3 = new SolarTerm24(); //上个月的第二个节气
                DateTime    d3;                     //上个月第二个节气的时间
                t3 = t1.Prior();
                if (Value.Month == 1)               // edit by Ukey 2017-01-03 每年一月份计算上一个月第二个节气出错
                {
                    d3 = CalendarUtil.GetSolarTermDateTime(y - 1, t3.ID);
                }
                else
                {
                    d3 = CalendarUtil.GetSolarTermDateTime(y, t3.ID);
                }

                DateTime d2;    //本月第二个节气的日期
                t2 = t1.Next(); //本月第二个节气
                d2 = CalendarUtil.GetSolarTermDateTime(y, t2.ID);
                if (ds == d2.ToString("yyyy-MM-dd"))
                {
                    solarTermInfo = new HFDateSolarTermInfo(t2.ID, d2);
                }
                SolarTerm24 t4 = new SolarTerm24(); //下个月的第一个节气
                DateTime    d4;                     //下个月第一个节气的日期
                t4 = t2.Next();                     //下个月的第一个节气
                d4 = CalendarUtil.GetSolarTermDateTime(y, t4.ID);
                if (ds == d2.ToString("yyyy-MM-dd"))
                {
                    solarTermInfo = new HFDateSolarTermInfo(t2.ID, d2);
                }
                if (solarTermInfo != null)
                {
                    returnValue = solarTermInfo.Name;
                }
                else
                {
                    int daydiff = 0;
                    if (Value < d1)  //d1 该月的第一个节气时间 d2 该月的第二个节气时间 d3 上个月的第二个节气的时间  前七后八的显示方式
                    {
                        daydiff = (Value - d3).Days + 1;
                        if (daydiff <= 7)
                        {
                            returnValue = t3.Name + "后" + daydiff.ToString() + "天";
                        }
                        else
                        {
                            daydiff     = (d1 - Value).Days;
                            returnValue = t1.Name + "前" + daydiff.ToString() + "天";
                        }
                    }
                    else if (Value > d1 && Value < d2)
                    {
                        // returnValue = t1.Name + "第" + (Value.Date - d1.Date).Days.ToString() + "天";
                        daydiff = (Value - d1).Days + 1;
                        if (daydiff <= 7)
                        {
                            returnValue = t1.Name + "后" + daydiff.ToString() + "天";
                        }
                        else
                        {
                            daydiff     = (d2 - Value).Days;
                            returnValue = t2.Name + "前" + daydiff.ToString() + "天";
                        }
                    }
                    else if (Value > d2)
                    {
                        //  returnValue = t2.Name + "第" + (Value.Date - d2.Date).Days.ToString() + "天";

                        daydiff = (Value - d2).Days + 1;
                        if (daydiff <= 7)
                        {
                            returnValue = t2.Name + "后" + daydiff.ToString() + "天";
                        }
                        else
                        {
                            daydiff     = (d4 - Value).Days;
                            returnValue = t4.Name + "前" + daydiff.ToString() + "天";
                        }
                    }
                }
                solarTermInfo = null;
                return(returnValue);
            }
            catch (Exception ex)
            {
                return("小寒");
            }
        }