C#2.0农历操作类

using  System;
using  System.Collections.Generic;
using  System.Globalization;

namespace  Common.ChineseLunisolarCalendar
{
    
class  ChineseAlmanac : System.Globalization.ChineseLunisolarCalendar
    {
        
private  System.Globalization.ChineseLunisolarCalendar netCalendar  =   new  System.Globalization.ChineseLunisolarCalendar();

        
#region  加强

        
///   <summary>
        
///  获取该农历对象的属相。
        
///   </summary>
        
///   <returns> 0-11,如“鼠”为0 </returns>
         public   string  GetAnimalSign(DateTime solarDateTime)
        {
            
return   " 猪鼠牛虎兔龙蛇马羊猴鸡狗 " .Substring(Zhi(GetChineseEraOfYear(solarDateTime)),  1 );
        }

        
///   <summary>
        
///  获取年柱。
        
///   </summary>
         public   int  GetChineseEraOfYear(DateTime solarDateTime)
        {
            
int  g  =  (solarDateTime.Year  -   1900   +   36 %   60 ;
            
if  ((DayDifference(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day)  +  solarDateTime.Hour  /   24 <  Term(solarDateTime.Year,  3 true -   1 )
            {
// 判断是否过立春
                g  -=   1 ;
            }
            
return  g  +   1 ;
        }

        
///   <summary>
        
///  获取月柱。
        
///   </summary>
         public   int  GetChineseEraOfMonth(DateTime solarDateTime)
        {
            
int  v  =  ((solarDateTime.Year  -   1900 *   12   +  solarDateTime.Month  +   12 %   60 ;
            
if  (solarDateTime.Day  <=  GetSolarTerm(solarDateTime)[ 0 ].SolarTermDateTime.Day)
                v 
-=   1 ;
            
return  v  +   1 ;
        }

        
///   <summary>
        
///  获取日柱。
        
///   </summary>
         public   int  GetChineseEraOfDay(DateTime solarDateTime)
        {
            
double  gzD  =  (solarDateTime.Hour  <   23 ?  EquivalentStandardDay(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day) : EquivalentStandardDay(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day)  +   1 ;
            
return  ( int )Math.Round(( double )rem(( int )gzD  +   15 60 ));
        }

        
///   <summary>
        
///  获取时柱。
        
///   </summary>
         public   int  GetChineseEraOfHour(DateTime solarDateTime)
        {
            
double  v  =   12   *  Gan(GetChineseEraOfDay(solarDateTime))  +  System.Math.Floor(( double )((solarDateTime.Hour  +   1 /   2 ))  -   11 ;
            
if  (solarDateTime.Hour  ==   23 )
                v 
-=   12 ;
            
return  ( int )Math.Round(rem(v,  60 ));
        }

        
///   <summary>
        
///  获取指定日期的节气。
        
///   </summary>
        
///   <param name="year"> 要获取的年 </param>
        
///   <param name="month"> 要获取的月 </param>
        
///   <returns></returns>
        
///   <remarks>
        
///  立春:立是开始的意思,春是蠢动,表示万物开始有生气,这一天春天开始。
        
///  雨水:降雨开始,雨水将多。
        
///  惊蛰:春雷响动,惊动蛰伏地下冬眠的生物,它们将开始出土活动。
        
///  春分:这是春季九十天的中分点,这一天昼夜相等,所以古代曾称春分秋分为昼夜分。
        
///  清明:明洁晴朗,气候温暖,草木开始萌发繁茂。
        
///  谷雨:雨生百谷的意思。雨水增多,适时的降雨对谷物生长很为有利。
        
///  立夏:夏天开始,万物渐将随温暖的气候而生长。
        
///  小满:满指籽粒饱满,麦类等夏热作物这时开始结籽灌浆,即将饱满。
        
///  芒种:有芒作物开始成熟,此时也是秋季作物播种的最繁忙时节。
        
///  夏至:白天最长,黑夜最短,这一天中午太阳位置最高,日影短至终极,古代又称这一天为日北至或长日至。
        
///  小暑:暑是炎热,此时还未到达最热。
        
///  大暑:炎热的程度到达高峰。
        
///  立秋:秋天开始,植物快成熟了。
        
///  处暑:处是住的意思,表示暑气到此为止。
        
///  白露:地面水气凝结为露,色白,是天气开始转凉了。
        
///  秋分:秋季九十天的中间,这一天昼夜相等,同春分一样,太阳从正东升起正西落下。
        
///  寒露:水露先白而后寒,是气候将逐渐转冷的意思。
        
///  霜降:水气开始凝结成霜。
        
///  立冬:冬是终了,作物收割后要收藏起来的意思,这一天起冬天开始。
        
///  小雪:开始降雪,但还不多。
        
///  大雪:雪量由小增大。
        
///  冬至:这一天中午太阳在天空中位置最低,日影最长,白天最短, 黑夜最长,古代又称短日至或日南至。
        
///  小寒:冷气积久而为寒,此时尚未冷到顶点。
        
///  大寒:天候达到最寒冷的程度
        
///   </remarks>
         public  SolarTerm[] GetSolarTerm( int  year,  int  month)
        {
            
string [] lunarHoliDayName  =
            
" 小寒 " " 大寒 " " 立春 " " 雨水 " , " 惊蛰 " " 春分 " " 清明 " " 谷雨 " , " 立夏 " " 小满 " " 芒种 " " 夏至 "
            
" 小暑 " " 大暑 " " 立秋 " " 处暑 " , " 白露 " " 秋分 " " 寒露 " " 霜降 " , " 立冬 " " 小雪 " " 大雪 " " 冬至 " };
            SolarTerm[] solarTerm 
=   new  SolarTerm[ 2 ];

            
for  ( int  n  =  month  *   2   -   1 ; n  <=  month  *   2 ; n ++ )
            {
                SolarTerm st 
=   new  SolarTerm();
                
double  dd  =  Term(year, n,  true );
                
double  sd1  =  AntiDayDifference( 2005 , Math.Floor(dd));
                
double  sm1  =  Math.Floor(sd1  /   100 );
                
int  h  =  ( int )Math.Floor(( double )Tail(dd)  *   24 );
                
int  min  =  ( int )Math.Floor(( double )(Tail(dd)  *   24   -  h)  *   60 );
                
int  mmonth  =  ( int )Math.Ceiling(( double )n  /   2 );
                
int  day  =  ( int )sd1  %   100 ;
                st.SolarTermDateTime 
=   new  DateTime(year, mmonth, day, h, min,  0 );
                st.Name 
=  lunarHoliDayName[n  -   1 ];
                solarTerm[n 
-  month  *   2   +   1 =  st;
            }
            
return  solarTerm;
        }

        
///   <summary>
        
///  获取指定日期的节气。
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
        
///   <remarks> 我国农历里把节气分得很细,定出了二十四节气,它们的名称大都反应物候、农时或季节的起点与中点。由于节气实际反应太阳运行所引 起的气候变化,故二十四节气为阳历的自然衍生的产物,与阴历无关。二十四节气中以立春、春分、立夏,夏至、立秋、秋分、立冬与冬至等八节气最为重要。它们之间大约相隔46天。一年分为四季,「立」表示四季中每一个季节的开始,而「分」与「至」表示正处于这季节的中间。现代我国所使用的历法,皆依回归年制定,二十四节气基本上是一致的,前后的相差不会超过一两天。为了调合回归年(阳历)与朔望月(阴历)之间的差异,农历把二十四节气中,双数的叫中气,单数的叫节气,而且规定每一个中气标定在一个农历的月份,例如雨水必定在正月,春分必定在二月,谷雨必定在三月,其余依此类推。另外,月名也必须和相对应的中气相合。 </remarks>
         public  SolarTerm[] GetSolarTerm(DateTime solarDateTime)
        {
            
return  GetSolarTerm(solarDateTime.Year, solarDateTime.Month);
        }

        
///   <summary>
        
///  返回星座
        
///   </summary>
         public   string  GetConstellation(DateTime solarDateTime)
        {
            
int  constellation  =   - 1 ;
            
int  Y  =  solarDateTime.Month  *   100   +  solarDateTime.Day;
            
if  (((Y  >=   321 &&  (Y  <=   419 ))) { constellation  =   0 ; }
            
else   if  ((Y  >=   420 &&  (Y  <=   520 )) { constellation  =   1 ; }
            
else   if  ((Y  >=   521 &&  (Y  <=   620 )) { constellation  =   2 ; }
            
else   if  ((Y  >=   621 &&  (Y  <=   722 )) { constellation  =   3 ; }
            
else   if  ((Y  >=   723 &&  (Y  <=   822 )) { constellation  =   4 ; }
            
else   if  ((Y  >=   823 &&  (Y  <=   922 )) { constellation  =   5 ; }
            
else   if  ((Y  >=   923 &&  (Y  <=   1022 )) { constellation  =   6 ; }
            
else   if  ((Y  >=   1023 &&  (Y  <=   1121 )) { constellation  =   7 ; }
            
else   if  ((Y  >=   1122 &&  (Y  <=   1221 )) { constellation  =   8 ; }
            
else   if  ((Y  >=   1222 ||  (Y  <=   119 )) { constellation  =   9 ; }
            
else   if  ((Y  >=   120 &&  (Y  <=   218 )) { constellation  =   10 ; }
            
else   if  ((Y  >=   219 &&  (Y  <=   320 )) { constellation  =   11 ; }

            
string  con  =   " 白羊金牛双子巨蟹狮子处女天秤天蝎射手摩羯水瓶双鱼 " ;
            
return  con.Substring( 2   *  constellation,  2 +   " " ;
        }

        
///   <summary>
        
///  获取儒略日。
        
///   </summary>
        
///   <remarks> zone时区y年m月d日h时min分sec秒距儒略历公元前4713年1月1日格林尼治时间正午12时的天数 </remarks>
         public   double  GetJulianDay(DateTime solarDateTime)
        {
            
int  ifG  =  IfGregorian(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day,  1 );
            
double  jt  =  (solarDateTime.Hour  +  (solarDateTime.Minute  +  solarDateTime.Second  /   60 /   60 /   24   -   0.5   -  TimeZone.CurrentTimeZone.GetUtcOffset(solarDateTime).Hours  /   24 ;
            
double  jd  =  (ifG  ==   1 ?  (EquivalentStandardDay(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day)  +   1721425   +  jt) : (EquivalentStandardDay(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day)  +   1721425   +  jt); // 儒略日
             return  jd;
        }

        
///   <summary>
        
///  获取约化儒略日。
        
///   </summary>
        
///   <remarks> 为了使用方便,国际上定义当前儒略日减去2400000.5日为约化儒略日(记为MJD)。 </remarks>
         public   double  GetMiniJulianDay(DateTime solarDateTime)
        {
            
return  GetJulianDay(solarDateTime)  -   2400000.5 ;
        }

        
///   <summary>
        
///  获取该农历日日食月食情况。
        
///   </summary>
        
///   <returns> Eclipse对象,包含该农历日日食月食情况。 </returns>
         public  Eclipse GetEclipse(DateTime solarDateTime,  double  timeZone)
        {
            Eclipse re 
=   new  Eclipse();
            
double  t  =  (solarDateTime.Year  -   1899.5 /   100 ;
            
double  ms  =  Math.Floor((solarDateTime.Year  -   1900 *   12.3685 );
            
double  rpi  =   180   /  Math.PI;
            
double  zone  =  timeZone;   // 时区
             double  f0  =  Angle(ms, t,  0 0.75933 2.172e-4 1.55e-7 +   0.53058868   *  ms  -   8.37e-4   *  t  +  zone  /   24   +   0.5 ;
            
double  fc  =   0.1734   -   3.93e-4   *  t;
            
double  j0  =   693595   +   29   *  ms;
            
double  aa0  =  Angle(ms, t,  0.08084821133 359.2242   /  rpi,  0.0000333   /  rpi,  0.00000347   /  rpi);
            
double  ab0  =  Angle(ms, t,  7.171366127999999e-2 306.0253   /  rpi,  - 0.0107306   /  rpi,  - 0.00001236   /  rpi);
            
double  ac0  =  Angle(ms, t,  0.08519585128 21.2964   /  rpi,  0.0016528   /  rpi,  0.00000239   /  rpi);
            
// double leap=0;   // 闰月数,0则不闰
             double  lunD  =   - 1 ;   // 农历日数
            
// double shuoD=0;   // 本阴历月的阴历朔日数
             double  shuoT  =   0 ;   // 本阴历月的朔时刻
             double  wangD  =   0 ;   // 本阴历月的望时刻
             double  wangT  =   0 ;   // 本阴历月的阴历望日数
             double  k1  =   0 ;

            
for  ( double  k  =   - 1 ; k  <=   13 ; k  +=   0.5 )
            {  
// k=整数为朔,k=半整数为望
                 double  aa  =  aa0  +   0.507984293   *  k;
                
double  ab  =  ab0  +   6.73377553   *  k;
                
double  ac  =  ac0  +   6.818486628   *  k;
                
double  f1  =  f0  +   1.53058868   *  k  +  fc  *  Math.Sin(aa)  -   0.4068   *  Math.Sin(ab)  +   0.0021   *  Math.Sin( 2   *  aa)  +   0.0161   *  Math.Sin( 2   *  ab)  +   0.0104   *  Math.Sin( 2   *  ac)  -   0.0074   *  Math.Sin(aa  -  ab)  -   0.0051   *  Math.Sin(aa  +  ab);
                
double  j  =  j0  +   28   *  k  +  f1;   // 朔或望的等效标准天数及时刻

                
// 记录当前日期的j值 
                 double  lunD0  =  EquivalentStandardDay(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day)  -  Math.Floor(j);   // 当前日距朔日的差值
                 if  (k  ==  Math.Floor(k)  &&  lunD0  >=   0   &&  lunD0  <=   29 )
                {
                    k1 
=  k;   // 记录当前时间对应的k值
                    shuoT  =  Tail(j);
                    lunD 
=  lunD0  +   1 ;
                }
                
if  (k  ==  (k1  +   0.5 ))
                {
                    wangT 
=  Tail(j);
                    wangD 
=  Math.Floor(j)  -  (EquivalentStandardDay(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day)  -  lunD  +   1 +   1 ;
                }

                
// 判断日月食
                re.Phenomena  =  EclipsePhenomena.None;
                
if  ((lunD  ==   1   &&  k  ==  k1)  ||  (lunD  ==  wangD  &&  k  ==  (k1  +   0.5 )))
                {
                    
if  (Math.Abs(Math.Sin(ac))  <=   0.36 )
                    {
                        
double  s  =   5.19595   -   0.0048   *  Math.Cos(aa)  +   0.002   *  Math.Cos( 2   *  aa)  -   0.3283   *  Math.Cos(ab)  -   0.006   *  Math.Cos(aa  +  ab)  +   0.0041   *  Math.Cos(aa  -  ab);
                        
double  r  =   0.207   *  Math.Sin(aa)  +   0.0024   *  Math.Sin( 2   *  aa)  -   0.039   *  Math.Sin(ab)  +   0.0115   *  Math.Sin( 2   *  ab)  -   0.0073   *  Math.Sin(aa  +  ab)  -   0.0067   *  Math.Sin(aa  -  ab)  +   0.0117   *  Math.Sin( 2   *  ac);
                        
double  p  =  Math.Abs(s  *  Math.Sin(ac)  +  r  *  Math.Cos(ac));
                        
double  q  =   0.0059   +   0.0046   *  Math.Cos(aa)  -   0.0182   *  Math.Cos(ab)  +   0.0004   *  Math.Cos( 2   *  ab)  -   0.0005   *  Math.Cos(aa  +  ab);
                        
if  (p  -  q  <=   1.5572 )
                        {
                            re.Phenomena 
=  EclipsePhenomena.EclipseOfSun;   // 日食
                             if  (k  !=  Math.Floor(k))
                            {
                                
if  (p  +  q  >=   1.0129 )
                                    re.Phenomena 
=  EclipsePhenomena.PartialEclipseOfTheMoon;   // 月偏食
                                 else
                                    re.Phenomena 
=  EclipsePhenomena.CompleteEclipseOfTheMoon;   // 月全食
                            }
                        }
                    }
                }
            }
            
// k循环结束

            re.Syzygy 
=  Syzygy.None;
            
if  (lunD  ==   1 )
            {
                re.Syzygy 
=  Syzygy.NewMoon;
                
int  h  =  ( int )Math.Floor(shuoT  *   24 );
                
int  min  =  ( int )Math.Floor((shuoT  *   24   -  h)  *   60 );
                re.DateTime 
=   new  DateTime(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day, h, min,  0 );   // 朔日则返回朔的时刻
            }
            
if  (lunD  ==  wangD)
            {
                re.Syzygy 
=  Syzygy.FullMoon;
                
int  h  =  ( int )Math.Floor(wangT  *   24 );
                
int  min  =  ( int )Math.Floor((wangT  *   24   -  h)  *   60 );
                re.DateTime 
=   new  DateTime(solarDateTime.Year, solarDateTime.Month, solarDateTime.Day, h, min,  0 );   // 望日则返回望的时刻
            }

            
return  re;
        }

        
#endregion

        
#region  字符串相关

        
///   <summary>
        
///  返回甲子数x对应的天干字符串
        
///   </summary>
         public   string  ToStringWithCelestialStem( int  x)
        {
            
return   " 癸甲乙丙丁戊己庚辛壬 " .Substring(x  %   10 1 );
        }

        
///   <summary>
        
///  返回甲子数x对应的地支字符串
        
///   </summary>
         public   string  ToStringWithTerrestrialBranch( int  x)
        {
            
return   " 亥子丑寅卯辰巳午未申酉戌 " .Substring(x  %   12 1 );
        }

        
///   <summary>
        
///  返回甲子数x对应的干支字符串
        
///   </summary>
        
///   <param name="x"></param>
        
///   <returns></returns>
         public   string  ToStringWithSexagenary( int  x)
        {
            
return  ToStringWithCelestialStem(x)  +  ToStringWithTerrestrialBranch(x);
        }

        
///   <summary>
        
///  将返回农历日对应的字符串
        
///   </summary>
        
///   <param name="v"></param>
        
///   <returns></returns>
         public   string  ToStringWithChineseDay( int  v)
        {
            
string  str  =   " 十一二三四五六七八九初十廿三 " ;
            
string  vstr  =  str.Substring(( int )Math.Floor(( double )v  /   10 +   10 1 +  str.Substring(( int )v  %   10 1 );
            
if  (v  ==   10 )
                vstr 
=   " 初十 " ;
            
return  vstr;
        }

        
///   <summary>
        
///  获取指定数的纳音五行。
        
///   </summary>
        
///   <param name="x"></param>
        
///   <returns></returns>
        
///   <remarks> 六十甲子和五音十二律结合起来,其中一律含五音,总数共为六十的“纳音五行”。 </remarks>
         public   string  GetNaYinWuXing( int  x)
        {
            
string [] s  =   new   string []
    { 
" 海中金 " " 炉中火 " " 大林木 " " 路旁土 " " 剑锋金 " " 山头火 " " 洞下水 " " 城墙土 " " 白腊金 " " 杨柳木 " " 泉中水 "
    
" 屋上土 " " 霹雷火 " " 松柏木 " " 常流水 " " 沙中金 " " 山下火 " " 平地木 " " 壁上土 " " 金箔金 " " 佛灯火 " " 天河水 "
    
" 大驿土 " " 钗钏金 " " 桑松木 " " 大溪水 " " 沙中土 " " 天上火 " " 石榴木 " " 大海水 "  };
            
return  s[( int )Math.Floor(( double )((x  -   1 /   2 ))];
        }

        
///   <summary>
        
///  获取指定时间的月代名词。
        
///   </summary>
        
///   <param name="solarDateTime"> 要获取的阳历对象 </param>
        
///   <returns></returns>
        
///   <remarks> 一年分为春夏秋冬四时,后来又按夏历正月、二月、三月等十二个月分为孟春、仲春、季春、孟夏、仲夏、季夏、孟秋、仲秋、季秋、孟冬、仲冬、季冬。古书常把这些名称作为月份的代名词。 </remarks>
         public   string  GetChineseMonthPronoun(DateTime solarDateTime)
        {
            
string [] s  =   new   string [] {  " 孟春 " " 仲春 " " 季春 " " 孟夏 " " 仲夏 " " 季夏 " " 孟秋 " " 仲秋 " " 季秋 " " 孟冬 " " 仲冬 " " 季冬 "  };
            
return  s[netCalendar.GetMonth(solarDateTime)  -   1 ];
        }

        
///   <summary>
        
///  获取指定时间的七十二候。
        
///   </summary>
        
///   <remarks> 五天一候,一年365天(平年)为73候,为与24节气对应,规定三候为一节(气)、一年为72候。每一候均以一种物候现象作相应,叫“候应”。72候的“候”应包括非生物和生物两大类,前者如“水始涸”、“东风解冻”、“虹始见”、“地始冻”等;后者有动物和植物,如“鸿雁来”、“虎始交”、“萍始生”、“苦菜秀”、“桃始华”等。七十二候的起源很早,对农事活动曾起过一定作用。虽然其中有些物候描述不那么准确,其中还有不科学成份,但对于了解古代华北地区的气候及其变迁,仍然具有一定的参考价值。由于当时确定物候的始见单位较小而气候的实际及地区差别很大,所以很难广泛应用。现在黄河流域物候现象已发生变化,其他地区的物候更是千差万别,必须不断发展物候学,制定新的自然历,否则一味地机械照搬古书是行不通的。 </remarks>
        
///   <param name="solarDateTime"> 要获取的阳历对象 </param>
        
///   <returns></returns>
         public   string  GetWuHou(DateTime solarDateTime)
        {
            
string  xs1  =   string .Empty;
            SolarTerm[] solar 
=  GetSolarTerm(solarDateTime);
            
int  jq  =  solar[ 0 ].SolarTermDateTime.Day;
            
int  zq  =  solar[ 1 ].SolarTermDateTime.Day;
            
int  c  =  solarDateTime.Day  +   1 ;
            
int  month  =  solarDateTime.Month  -   1 ;

            
if  (month  ==   0 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 水泉动 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 雁北乡 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 鹊始巢 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 鳺始鴝 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 鸡始乳 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 征鸟厉疾 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 水泽腹坚 " ; }
            }
            
if  (month  ==   1 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 水泽腹坚 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 东风解冻 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 蛰虫始振 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 鱼上冰 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 獭祭鱼 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 候雁北 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 草木萌动 " ; }
            }
            
if  (month  ==   2 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 草木萌动 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 桃始华 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 仓庚鸣 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 鹰化为鸠 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 玄鸟至 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 雷乃发声 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 始电 " ; }
            }
            
if  (month  ==   3 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 始电 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 桐始华 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 田鼠化为鴽 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 虹始见 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 萍始生 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 鸣鸠拂其羽 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 戴胜降于桑 " ; }
            }
            
if  (month  ==   4 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 戴胜降于桑 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 蝼蝈鸣 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 蚯蚓出 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 王瓜生 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 苦菜秀 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 靡草死 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 麦秋至 " ; }
            }
            
if  (month  ==   5 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 麦秋至 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 螳螂生 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 鵙始鸣 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 反舌无声 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 鹿角解 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 蜩始鸣 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 半夏生 " ; }
            }
            
if  (month  ==   6 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 半夏生 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 温风至 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 蟀蟋居壁 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 鹰如鸷 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 腐草为萤 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 土润溽暑 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 大雨时行 " ; }
            }
            
if  (month  ==   7 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 大雨时行 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 凉风至 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 白露降 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 寒蝉鸣 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 鹰乃祭鸟 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 天地始肃 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 禾乃登 " ; }
            }
            
if  (month  ==   8 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 禾乃登 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 鸿雁来 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 玄鸟归 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 群鸟养羞 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 雷乃收声 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 蛰虫坯户 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 水始涸 " ; }
            }
            
if  (month  ==   9 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 水始涸 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 鸿雁来宾 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 雀入大水为蛤 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 菊有黄花 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 豺乃祭兽 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 草木黄落 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 蛰虫咸俯 " ; }
            }
            
if  (month  ==   10 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 蛰虫咸俯 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 水始冰 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 地始冻 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 雉入大水为蜃 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 虹藏不见 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 天气腾地气降 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 闭塞成冬 " ; }
            }
            
if  (month  ==   11 )
            {
                
if  (c  <  jq  -   1 ) { xs1  =   " 闭塞成冬 " ; }
                
else   if  (c  >=  jq  -   1   &&  c  <=  jq  +   3 ) { xs1  =   " 鹖鴠不鸣 " ; }
                
else   if  (c  >  jq  +   3   &&  c  <=  jq  +   8 ) { xs1  =   " 虎始交 " ; }
                
else   if  (c  >  jq  +   8   &&  c  <  zq  -   1 ) { xs1  =   " 荔挺出 " ; }
                
else   if  (c  >=  zq  -   1   &&  c  <=  zq  +   3 ) { xs1  =   " 蚯蚓结 " ; }
                
else   if  (c  >  zq  +   3   &&  c  <=  zq  +   8 ) { xs1  =   " 麋鹿解 " ; }
                
else   if  (c  >  zq  +   8 ) { xs1  =   " 水泉动 " ; }
            }
            
return  xs1;
        }

        
///   <summary>
        
///  获取当日月相名。
        
///   </summary>
        
///   <param name="solarDateTime"> 要获取的阳历对象 </param>
        
///   <returns></returns>
         public   string  GetMoonName(DateTime solarDateTime)
        {
            
string  mnname  =   string .Empty;
            
int  month  =  netCalendar.GetDayOfMonth(solarDateTime);

            
if  (month  >=   24 ) mnname  =   " 有明月 " ;
            
if  (month  <=   14 ) mnname  =   " 宵月 " ;
            
if  (month  <=   7 ) mnname  =   " 夕月 " ;
            
if  (month  ==   1 ) mnname  =   " 新(朔)月 " ;
            
if  (month  ==   2 ) mnname  =   " 既朔月 " ;
            
if  (month  ==   3 ) mnname  =   " 娥眉新月 " ;
            
if  (month  ==   4 ) mnname  =   " 娥眉新月 " ;
            
if  (month  ==   5 ) mnname  =   " 娥眉月 " ;
            
if  (month  ==   7 ) mnname  =   " 上弦月 " ;
            
if  (month  ==   8 ) mnname  =   " 上弦月 " ;
            
if  (month  ==   9 ) mnname  =   " 九夜月 " ;
            
if  (month  ==   13 ) mnname  =   " 渐盈凸月 " ;
            
if  (month  ==   14 ) mnname  =   " 小望月 " ;
            
if  (month  ==   15 ) mnname  =   " 满(望)月 " ;
            
if  (month  ==   16 ) mnname  =   " 既望月 " ;
            
if  (month  ==   17 ) mnname  =   " 立待月 " ;
            
if  (month  ==   18 ) mnname  =   " 居待月 " ;
            
if  (month  ==   19 ) mnname  =   " 寝待月 " ;
            
if  (month  ==   20 ) mnname  =   " 更待月 " ;
            
if  (month  ==   21 ) mnname  =   " 渐亏凸月 " ;
            
if  (month  ==   22 ) mnname  =   " 下弦月 " ;
            
if  (month  ==   23 ) mnname  =   " 下弦月 " ;
            
if  (month  ==   26 ) mnname  =   " 娥眉残月 " ;
            
if  (month  ==   27 ) mnname  =   " 娥眉残月 " ;
            
if  (month  ==   28 ) mnname  =   " 残月 " ;
            
if  (month  ==   29 ) mnname  =   " 晓月 " ;
            
if  (month  ==   30 ) mnname  =   " 晦月 " ;

            
return  mnname;
        }

        
///   <summary>
        
///  获取指定时间的日禄。
        
///   </summary>
        
///   <param name="solarDateTime"> 要获取的阳历对象 </param>
        
///   <returns></returns>
         public   string  GetRiLu(DateTime solarDateTime)
        {
            
string  dayglk  =   " 寅卯巳午巳午申酉亥子 " ;
            
int  bsg  =  Zhi(LD(solarDateTime));
            
int  bs  =  Gan(LD(solarDateTime));

            
string  dayglus  =   string .Empty;
            
if  (bsg  ==   0 ) { dayglus  =  ToStringWithCelestialStem( 10 +   " 命进禄 " ; }
            
else   if  (bsg  ==   2 ) { dayglus  =  ToStringWithCelestialStem( 1 +   " 命进禄 " ; }
            
else   if  (bsg  ==   3 ) { dayglus  =  ToStringWithCelestialStem( 2 +   " 命进禄 " ; }
            
else   if  (bsg  ==   5 ) { dayglus  =  ToStringWithCelestialStem( 3 +   " , "   +  ToStringWithCelestialStem( 5 +   " 命进禄 " ; }
            
else   if  (bsg  ==   6 ) { dayglus  =  ToStringWithCelestialStem( 4 +   " , "   +  ToStringWithCelestialStem( 6 +   " 命进禄 " ; }
            
else   if  (bsg  ==   8 ) { dayglus  =  ToStringWithCelestialStem( 7 +   " 命进禄 " ; }
            
else   if  (bsg  ==   9 ) { dayglus  =  ToStringWithCelestialStem( 8 +   " 命进禄 " ; }
            
else   if  (bsg  ==   11 ) { dayglus  =  ToStringWithCelestialStem( 9 +   " 命进禄 " ; }
            
else  { dayglus  =   "" ; }

            
return  dayglk.Substring(bs,  1 +   " 命互禄  "   +  dayglus;
        }

        
///   <summary>
        
///  获取吉神方位。
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
         public   string  GetLuckyDeity(DateTime solarDateTime)
        {
            
int  bs  =  Gan(LD(solarDateTime));

            
string  xs  =   string .Empty, fs  =   string .Empty, cs  =   string .Empty;

            
if  (bs  ==   0   ||  bs  ==   5 ) { xs  =   " 喜神:东北  " ; }
            
else   if  (bs  ==   1   ||  bs  ==   6 ) { xs  =   " 喜神:西北  " ; }
            
else   if  (bs  ==   2   ||  bs  ==   7 ) { xs  =   " 喜神:西南  " ; }
            
else   if  (bs  ==   3   ||  bs  ==   8 ) { xs  =   " 喜神:正南  " ; }
            
else   if  (bs  ==   4   ||  bs  ==   9 ) { xs  =   " 喜神:东南  " ; }

            
if  (bs  ==   0   ||  bs  ==   1 ) { fs  =   " 福神:东南  " ; }
            
else   if  (bs  ==   2   ||  bs  ==   3 ) { fs  =   " 福神:正东  " ; }
            
else   if  (bs  ==   4 ) { fs  =   " 福神:正北  " ; }
            
else   if  (bs  ==   5 ) { fs  =   " 福神:正南  " ; }
            
else   if  (bs  ==   6   ||  bs  ==   7 ) { fs  =   " 福神:西南  " ; }
            
else   if  (bs  ==   8 ) { fs  =   " 福神:西北  " ; }
            
else   if  (bs  ==   9 ) { fs  =   " 福神:正西  " ; }

            
if  (bs  ==   0   ||  bs  ==   1 ) { cs  =   " 财神:东北 " ; }
            
else   if  (bs  ==   2   ||  bs  ==   3 ) { cs  =   " 财神:西南 " ; }
            
else   if  (bs  ==   4   ||  bs  ==   5 ) { cs  =   " 财神:正北 " ; }
            
else   if  (bs  ==   6   ||  bs  ==   7 ) { cs  =   " 财神:正东 " ; }
            
else   if  (bs  ==   8   ||  bs  ==   9 ) { cs  =   " 财神:正南 " ; }

            
return  xs  +  fs  +  cs;
        }

        
///   <summary>
        
///  获取彭祖百忌。
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
        
///   <remarks> 每日时辰应忌讳之事 </remarks>
         public   string  GetPengZuBaiJi(DateTime solarDateTime)
        {
            
string [] g  =   new   string [] {  " 甲不开仓  " " 乙不栽植  " " 丙不修灶  " " 丁不剃头  " " 戊不受田  " " 己不破券  " " 庚不经络  " " 辛不合酱  " " 壬不泱水  " " 癸不词讼  "  };
            
string [] z  =   new   string [] {  " 子不问卜 " " 丑不冠带 " " 寅不祭祀 " " 卯不穿井 " " 辰不哭泣 " " 巳不远行 " " 午不苫盖 " " 未不服药 " " 申不安床 " " 酉不会客 " " 戌不吃犬 " " 亥不嫁娶 "  };
            
int  ceod  =  GetChineseEraOfDay(solarDateTime)  -   1 ;
            
return  g[ceod  %   10 +  z[ceod  %   12 ];
        }

        
///   <summary>
        
///  获取相冲。
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
        
///   <remarks> “冲”即地支相冲,即子午相冲、丑未相冲、寅申相冲、卯酉相冲、辰戌相冲、巳亥相冲,再把十二地支配以十二属相,子鼠、丑牛、寅虎、卯兔、辰龙、巳蛇、午马、未羊、申猴、酉鸡、戌狗、亥猪。于是,凡子日,与午相冲,即为“冲马”;寅日,与申相冲,即为“冲猴”。黄历设立此款,是告诉人们,不要选用那些与自己属相相冲的日子。 </remarks>
         public   string  GetXiangChong(DateTime solarDateTime)
        {
            
string [] gan  =   new   string [] {  " " " " " " " " " " " " " " " " " " " "  };
            
string [] zhi  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] animal  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] animal2  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };

            
int  dd  =  Zhi(LD(solarDateTime));
            
int  d  =  Gan(LD(solarDateTime));

            
return  animal[dd]  +   " 日冲( "   +  gan[d]  +  zhi[dd]  +   " ) "   +  animal2[dd];
        }

        
///   <summary>
        
///  获取岁煞。
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
        
///   <remarks> 岁煞,常居四季,成为“四季之阴气”,极其狠毒,能游行天上,所理之地不可穿凿、修营和移徙。不慎而冲犯这,家中子孙六畜将受伤害。然岁煞巡行的方位却极易寻觅。子日起正南,向东逆行,一日一位,四日一周,循环往复。 </remarks>
         public   string  GetSuiSha(DateTime solarDateTime)
        {
            
string [] sfw  =   new   string [] {  " " " " " " " 西 " " " " " " " " 西 " " " " " " " " 西 "  };
            
int  dd  =  Zhi(LD(solarDateTime));
            
return   " 岁煞 "   +  sfw[dd];
        }

        
///   <summary>
        
///  获取指定甲子数所对应的五行。
        
///   </summary>
        
///   <param name="x"></param>
        
///   <returns></returns>
         public   string  GetWuXing( int  x)
        {
            
string  nyy  =   string .Empty;
            
string  d  =  Gan(x).ToString()  +  Zhi(x).ToString();

            
if  (d  ==   " 00 "   ||  d  ==   " 11 " ) nyy  =   " " ;
            
if  (d  ==   " 22 "   ||  d  ==   " 33 " ) nyy  =   " " ;
            
if  (d  ==   " 44 "   ||  d  ==   " 55 " ) nyy  =   " " ;
            
if  (d  ==   " 66 "   ||  d  ==   " 77 " ) nyy  =   " " ;
            
if  (d  ==   " 88 "   ||  d  ==   " 99 " ) nyy  =   " " ;
            
if  (d  ==   " 010 "   ||  d  ==   " 111 " ) nyy  =   " " ;
            
if  (d  ==   " 20 "   ||  d  ==   " 31 " ) nyy  =   " " ;
            
if  (d  ==   " 42 "   ||  d  ==   " 53 " ) nyy  =   " " ;
            
if  (d  ==   " 64 "   ||  d  ==   " 75 " ) nyy  =   " " ;
            
if  (d  ==   " 86 "   ||  d  ==   " 97 " ) nyy  =   " " ;
            
if  (d  ==   " 08 "   ||  d  ==   " 19 " ) nyy  =   " " ;
            
if  (d  ==   " 210 "   ||  d  ==   " 311 " ) nyy  =   " " ;
            
if  (d  ==   " 40 "   ||  d  ==   " 51 " ) nyy  =   " " ;
            
if  (d  ==   " 62 "   ||  d  ==   " 73 " ) nyy  =   " " ;
            
if  (d  ==   " 84 "   ||  d  ==   " 95 " ) nyy  =   " " ;
            
if  (d  ==   " 06 "   ||  d  ==   " 17 " ) nyy  =   " " ;
            
if  (d  ==   " 28 "   ||  d  ==   " 39 " ) nyy  =   " " ;
            
if  (d  ==   " 410 "   ||  d  ==   " 511 " ) nyy  =   " " ;
            
if  (d  ==   " 60 "   ||  d  ==   " 71 " ) nyy  =   " " ;
            
if  (d  ==   " 82 "   ||  d  ==   " 93 " ) nyy  =   " " ;
            
if  (d  ==   " 04 "   ||  d  ==   " 15 " ) nyy  =   " " ;
            
if  (d  ==   " 26 "   ||  d  ==   " 37 " ) nyy  =   " " ;
            
if  (d  ==   " 48 "   ||  d  ==   " 59 " ) nyy  =   " " ;
            
if  (d  ==   " 610 "   ||  d  ==   " 711 " ) nyy  =   " " ;
            
if  (d  ==   " 80 "   ||  d  ==   " 91 " ) nyy  =   " " ;
            
if  (d  ==   " 02 "   ||  d  ==   " 13 " ) nyy  =   " " ;
            
if  (d  ==   " 24 "   ||  d  ==   " 35 " ) nyy  =   " " ;
            
if  (d  ==   " 46 "   ||  d  ==   " 57 " ) nyy  =   " " ;
            
if  (d  ==   " 68 "   ||  d  ==   " 79 " ) nyy  =   " " ;
            
if  (d  ==   " 810 "   ||  d  ==   " 911 " ) nyy  =   " " ;

            
return  nyy;
        }

        
///   <summary>
        
///  获取星宿。
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
         public   string  GetXingXiu(DateTime solarDateTime)
        {
            
string [] Sukuyou  =   new   string [] {  " 东方角木蛟-吉 " " 东方亢金龙-凶 " " 东方氐土貉-凶 " " 东方房日兔-吉 " " 东方心月狐-凶 " " 东方尾火虎-吉 " " 东方箕水豹-吉 " " 北方斗木獬-吉 " " 北方牛金牛-凶 " " 北方女土蝠-凶 " " 北方虚日鼠-凶 " " 北方危月燕-凶 " " 北方室火猪-吉 " " 北方壁水貐-吉 " " 西方奎木狼-凶 " " 西方娄金狗-吉 " " 西方胃土雉-吉 " " 西方昴日鸡-凶 " " 西方毕月乌-吉 " " 西方觜火猴-凶 " " 西方参水猿-凶 " " 南方井木犴-吉 " " 南方鬼金羊-凶 " " 南方柳土獐-凶 " " 南方星日马-凶 " " 南方张月鹿-吉 " " 南方翼火蛇-凶 " " 南方轸水蚓-吉 "  };
            
int  s  =  ( int )(GetJulianDay(solarDateTime)  +   12 %   28 ;
            
return  Sukuyou[s];
        }

        
///   <summary>
        
///  获取六耀。
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
         public   string  GetLiuYao(DateTime solarDateTime)
        {
            
string [] Rokuyou  =   new   string [] {  " 先胜 " " 友引 " " 先负 " " 佛灭 " " 大安 " " 赤口 "  };
            
int  k  =  (solarDateTime.Month  +  solarDateTime.Day  +   4 %   6 ;
            
return  Rokuyou[k];
        }

        
///   <summary>
        
///  获取12建星。
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
         public   string  Get12JianXing(DateTime solarDateTime)
        {
            
string [] jcName0  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName1  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName2  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName3  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName4  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName5  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName6  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName7  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName8  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName9  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName10  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };
            
string [] jcName11  =   new   string [] {  " " " " " " " " " " " " " " " " " " " " " " " "  };

            
int  num  =  Zhi(LM(solarDateTime));
            
int  num2  =  Zhi(LD(solarDateTime));

            
if  (num  ==   0 return  (jcName0[num2]);
            
if  (num  ==   1 return  (jcName1[num2]);
            
if  (num  ==   2 return  (jcName2[num2]);
            
if  (num  ==   3 return  (jcName3[num2]);
            
if  (num  ==   4 return  (jcName4[num2]);
            
if  (num  ==   5 return  (jcName5[num2]);
            
if  (num  ==   6 return  (jcName6[num2]);
            
if  (num  ==   7 return  (jcName7[num2]);
            
if  (num  ==   8 return  (jcName8[num2]);
            
if  (num  ==   9 return  (jcName9[num2]);
            
if  (num  ==   10 return  (jcName10[num2]);
            
if  (num  ==   11 return  (jcName11[num2]);
            
return   "" ;
        }

        
///   <summary>
        
///  获取值日星神
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
         public   string  GetXingShen(DateTime solarDateTime)
        {
            
string [] zrxName1  =   new   string [] {  " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) "  };
            
string [] zrxName2  =   new   string [] {  " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) "  };
            
string [] zrxName3  =   new   string [] {  " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) "  };
            
string [] zrxName4  =   new   string [] {  " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) "  };
            
string [] zrxName5  =   new   string [] {  " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) "  };
            
string [] zrxName6  =   new   string [] {  " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) "  };
            
string [] zrxName7  =   new   string [] {  " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) "  };
            
string [] zrxName8  =   new   string [] {  " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) "  };
            
string [] zrxName9  =   new   string [] {  " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) "  };
            
string [] zrxName10  =   new   string [] {  " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) "  };
            
string [] zrxName11  =   new   string [] {  " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) " " 天刑(黑道日) " " 朱雀(黑道日) "  };
            
string [] zrxName12  =   new   string [] {  " 天刑(黑道日) " " 朱雀(黑道日) " " 金匮(黄道日) " " 天德(黄道日) " " 白虎(黑道日) " " 玉堂(黄道日) " " 天牢(黑道日) " " 玄武(黑道日) " " 司命(黄道日) " " 勾陈(黑道日) " " 青龙(黄道日) " " 明堂(黄道日) "  };

            
int  num  =  Zhi(LM(solarDateTime));
            
int  num2  =  Zhi(LD(solarDateTime));

            
if  (num  ==   2 )
                
return  (zrxName1[num2]);
            
if  (num  ==   3 )
                
return  (zrxName2[num2]);
            
if  (num  ==   4 )
                
return  (zrxName3[num2]);
            
if  (num  ==   5 )
                
return  (zrxName4[num2]);
            
if  (num  ==   6 )
                
return  (zrxName5[num2]);
            
if  (num  ==   7 )
                
return  (zrxName6[num2]);
            
if  (num  ==   8 )
                
return  (zrxName7[num2]);
            
if  (num  ==   9 )
                
return  (zrxName8[num2]);
            
if  (num  ==   10 )
                
return  (zrxName9[num2]);
            
if  (num  ==   11 )
                
return  (zrxName10[num2]);
            
if  (num  ==   0 )
                
return  (zrxName11[num2]);
            
if  (num  ==   1 )
                
return  (zrxName12[num2]);

            
return   "" ;
        }

        
///   <summary>
        
///  获取九星。
        
///   </summary>
        
///   <param name="solarDateTime"></param>
        
///   <returns></returns>
         public   string  GetJiuXing(DateTime solarDateTime)
        {
            
string [] KyuuseiName  =   new   string [] {  " 一白-太乙星(水)-吉神 " " 二黒-摄提星(土)-凶神 " " 三碧-轩辕星(木)-安神 " " 四緑-招摇星(木)-安神 " " 五黄-天符星(土)-凶神 " " 六白-青龙星(金)-吉神 " " 七赤-咸池星(金)-凶神 " " 八白-太阴星(土)-吉神 " " 九紫-天乙星(火)-吉神 "  };
            
return  KyuuseiName[Jd2Kyuusei(GetJulianDay(solarDateTime))];
        }

        
///   <summary>
        
///  获取几牛耕田。
        
///   </summary>
        
///   <param name="year"></param>
        
///   <returns></returns>
        
///   <remarks> 每年第一个丑日(丑为牛)在正月初几,就是“几牛耕田”。耕田的牛是多多益善,越多越好 </remarks>
         public   string  GetNiuGenTian( int  year)
        {
            
int  i  =  Zhi(GetChineseEraOfDay( new  DateTime(year,  1 1 , netCalendar)));
            
int  t  =  ( 15   -  i)  %   12 ;
            
string  s  =  ToStringWithChineseDay(t);
            
if  (t  <=   10 )
            {
                s 
=  s.Substring( 1 );
            }
            
return  s  +   " 牛耕田 " ;
        }

        
///   <summary>
        
///  获取几龙治水。
        
///   </summary>
        
///   <param name="year"></param>
        
///   <returns></returns>
        
///   <remarks> 是根据每年正月第一个辰日(辰为龙)在第几日决定的。如在正月初五,就叫“五龙治水”,在初六,就叫“六龙治水”,等等。据说,龙数越多,雨量越少,龙数越少,雨量就越多。民间自古就有“龙多不下雨”的谚语。 </remarks>
         public   string  GetLongZhiSui( int  year)
        {
            
int  i  =  Zhi(GetChineseEraOfDay( new  DateTime(year,  1 1 , netCalendar)));
            
int  t  =  ( 18   -  i)  %   12 ;
            
string  s  =  ToStringWithChineseDay(t);
            
if  (t  <=   10 )
            {
                s 
=  s.Substring( 1 );
            }
            
return  s  +   " 龙治水 " ;
        }

        
#endregion

        
#region  计算

        
private   int  LD(DateTime solarDateTime)
        {
            
double  dayCyclical  =  Microsoft.JScript.DateConstructor.UTC(solarDateTime.Year, solarDateTime.Month  -   1 1 0 0 0 0 /   86400000   +   25567   +   9 ;
            
return  ( int )(dayCyclical  +  solarDateTime.Day);
        }

        
private   int  LM(DateTime solarDateTime)
        {
            
int  num  =  (solarDateTime.Year  -   1900 *   12   +  solarDateTime.Month  +   11 ;
            
if  ((solarDateTime.Day  +   1 >=  GetSolarTerm(solarDateTime)[ 0 ].SolarTermDateTime.Day)
            {
                num 
+=   1 ;
            }
            
return  num;
        }

        
int [] NKyuusei  =   new   int [] {  - 1 - 1 - 1  };

        
private   int  Jd2Kyuusei( double  JD)
        {
            
int  flag, b;
            
int  jD  =  ( int )Math.Floor(JD);
            
if  ((jD  <  NKyuusei[ 0 ])  ||  (jD  >=  NKyuusei[ 0 +  NKyuusei[ 1 ]))
            {
                
if  (GetTenton(jD)  <   0 return   - 1 ;
            }

            
if  (NKyuusei[ 2 <   0 )
            {
                flag 
=   - 1 ;
            }
            
else
            {
                flag 
=   1 ;
            }
            b 
=  flag  *  NKyuusei[ 2 -   1   +   270 ;
            b 
+=  (jD  -  NKyuusei[ 0 ])  *  flag;
            
return  b  %   9 ;
        }

        
private   int  GetTenton( int  JD)
        {
            
int [] KyuuseiJD  =   new   int [] {  2404030 2404600 2404810 2408800 2409010 2413000 2413210 2417200 2417410 2421220 2421400 2421610 2425420 2425630 2429620 2429800 2430010 2433820 2434030 2438020 2438230 2442220 2442430 2446420 2446630 2450620 2450830 2454820 2455030 2458840 2459020 2459230 2463250 2467240 2467420 2467630 2471440 2471650 2475640 2475850 2477650  };
            
int [] KyuuseiJDF  =   new   int [] {  1 - 3 1 7 - 9 - 3 1 7 - 9 7 - 3 1 - 3 1 7 - 3 1 - 3 1 7 - 9 - 3 1 7 - 9 - 3 1 7 - 9 7 - 3 1 1 7 - 3 1 - 3 1 7 - 9 - 9  };
            
int  KJD  =   0 , KJDF  =   0 , n  =   0 ;
            
int  ne  =  KyuuseiJD.Length;
            
if  (JD  <  KyuuseiJD[ 0 ])  return   - 1 ;
            
if  (JD  >=  KyuuseiJD[ne  -   1 ])  return   - 1 ;

            
for  (n  =   1 ; n  <  ne; n ++ )
            {
                
if  (JD  <  KyuuseiJD[n])
                {
                    KJD 
=  KyuuseiJD[n  -   1 ];
                    KJDF 
=  KyuuseiJDF[n  -   1 ];
                    ne 
=  KyuuseiJD[n];
                    
break ;
                }
            }
            
do
            {
                NKyuusei[
0 =  KJD;
                KJD 
+=   180 ;
                
if  (KJD  +   61   >  ne) { KJD  =  ne; }
                
if  (JD  >=  KJD)
                {
                    KJDF 
=  (KJDF  <   0 ?   1  :  - 9 ;
                }
            } 
while  (JD  >=  KJD);
            NKyuusei[
1 =  KJD  -  NKyuusei[ 0 ];
            NKyuusei[
2 =  KJDF;
            
return  NKyuusei[ 0 ];
        }

        
///   <summary>
        
///  判断y年m月(1,2,..,12,下同)d日是Gregorian历还是Julian历(opt=1,2,3分别表示标准日历,Gregorge历和Julian历),是则返回1,是Julian历则返回0,若是Gregorge历所删去的那10天则返回-1
        
///   </summary>
         private   int  IfGregorian( int  y,  int  m,  int  d,  int  opt)
        {
            
if  (opt  ==   1 )
            {
                
if  (y  >   1582   ||  (y  ==   1582   &&  m  >   10 ||  (y  ==   1582   &&  m  ==   10   &&  d  >   14 ))
                    
return  ( 1 );   // Gregorian
                 else
                    
if  (y  ==   1582   &&  m  ==   10   &&  d  >=   5   &&  d  <=   14 )
                        
return  ( - 1 );   //
                     else
                        
return  ( 0 );   // Julian
            }

            
if  (opt  ==   2 )
                
return  ( 1 );   // Gregorian
             if  (opt  ==   3 )
                
return  ( 0 );   // Julian
             return  ( - 1 );
        }

        
///   <summary>
        
///  返回等效标准天数(y年m月d日相应历种的1年1月1日的等效(即对Gregorian历与Julian历是统一的)天数)
        
///   </summary>
         private   double  EquivalentStandardDay( int  y,  int  m,  int  d)
        {
            
double  v  =  (y  -   1 *   365   +  Math.Floor(( double )((y  -   1 /   4 ))  +  DayDifference(y, m, d)  -   2 ;   // Julian的等效标准天数
             if  (y  >   1582 )
                v 
+=   - Math.Floor(( double )((y  -   1 /   100 ))  +  Math.Floor(( double )((y  -   1 /   400 ))  +   2 ;   // Gregorian的等效标准天数
             return  v;
        }

        
///   <summary>
        
///  返回阳历y年m月d日的日差天数(在y年年内所走过的天数,如2000年3月1日为61)
        
///   </summary>
         private   int  DayDifference( int  y,  int  m,  int  d)
        {
            
int  ifG  =  IfGregorian(y, m, d,  1 );
            
int [] monL  =  {  0 31 28 31 30 31 30 31 31 30 31 30 31  };
            
if  (ifG  ==   1 )
                
if  ((y  %   100   !=   0   &&  y  %   4   ==   0 ||  (y  %   400   ==   0 ))
                    monL[
2 +=   1 ;
                
else
                    
if  (y  %   4   ==   0 )
                        monL[
2 +=   1 ;
            
int  v  =   0 ;
            
for  ( int  i  =   0 ; i  <=  m  -   1 ; i ++ )
            {
                v 
+=  monL[i];
            }
            v 
+=  d;
            
if  (y  ==   1582 )
            {
                
if  (ifG  ==   1 )
                    v 
-=   10 ;
                
if  (ifG  ==   - 1 )
                    v 
=   0 ;   // infinity 
            }
            
return  v;
        }

        
// 原始:S
         ///   <summary>
        
/// 返回y年第n个节气(如小寒为1)的日差天数值(pd取值真假,分别表示平气和定气)
        
///   </summary>
         private   double  Term( int  y,  int  n,  bool  pd)
        {
            
double  juD  =  y  *  ( 365.2423112   -   6.4e-14   *  (y  -   100 *  (y  -   100 -   3.047e-8   *  (y  -   100 ))  +   15.218427   *  n  +   1721050.71301 ; // 儒略日
             double  tht  =  3e - 4   *  y  -   0.372781384   -   0.2617913325   *  n; // 角度
             double  yrD  =  ( 1.945   *  Math.Sin(tht)  -   0.01206   *  Math.Sin( 2   *  tht))  *  ( 1.048994   -   2.583e-5   *  y); // 年差实均数
             double  shuoD  =   - 18e - 4   *  Math.Sin( 2.313908653   *  y  -   0.439822951   -   3.0443   *  n); // 朔差实均数
             double  vs  =  (pd)  ?  (juD  +  yrD  +  shuoD  -  EquivalentStandardDay(y,  1 0 -   1721425 ) : (juD  -  EquivalentStandardDay(y,  1 0 -   1721425 );
            
return  vs;
        }

        
///   <summary>
        
///  返回阳历y年日差天数为x时所对应的月日数(如y=2000,x=274时,返回1001(表示10月1日,即返回100*m+d))
        
///   </summary>
         private   double  AntiDayDifference( int  y,  double  x)
        {
            
int  m  =   1 ;
            
for  ( int  j  =   1 ; j  <=   12 ; j ++ )
            {
                
int  mL  =  DayDifference(y, j  +   1 1 -  DayDifference(y, j,  1 );
                
if  (x  <=  mL  ||  j  ==   12 )
                {
                    m 
=  j;
                    
break ;
                }
                
else
                    x 
-=  mL;
            }
            
return   100   *  m  +  x;
        }

        
// 原始:tail
         ///   <summary>
        
///  返回x的小数尾数,若x为负值,则是1-小数尾数
        
///   </summary>
         private   double  Tail( double  x)
        {
            
return  x  -  Math.Floor(x);
        }

        
// 原始:ang
         ///   <summary>
        
///  角度函数
        
///   </summary>
         private   double  Angle( double  x,  double  t,  double  c1,  double  t0,  double  t2,  double  t3)
        {
            
return  Tail(c1  *  x)  *   2   *  Math.PI  +  t0  -  t2  *  t  *  t  -  t3  *  t  *  t  *  t;
        }

        
///   <summary>
        
///  广义求余
        
///   </summary>
         private   double  rem( double  x,  double  w)
        {
            
return  Tail((x  /  w))  *  w;
        }

        
///   <summary>
        
///  返回甲子数x对应的天干数(如33为3)
        
///   </summary>
         private   int  Gan( int  x)
        {
            
return  x  %   10 ;
        }

        
///   <summary>
        
///  返回甲子数x对应的地支数(如33为9)
        
///   </summary>
         private   int  Zhi( int  x)
        {
            
return  x  %   12 ;
        }

        
#endregion

        
#region  节日纪念日

        
///   <summary>
        
///  获取公历节日字符串。
        
///   </summary>
         public   string  GetHoliday(DateTime solarDateTime)
        {
            
string  re  =   "" ;
            
foreach  ( string  s  in  holiday)
            {
                
if  (solarDateTime.Month  ==  Convert.ToInt32(s.Substring( 0 2 )))
                {
                    
if  (solarDateTime.Day  ==  Convert.ToInt32(s.Substring( 2 2 )))
                    {
                        re 
=  s.Substring( 4 );
                        
break ;
                    }
                }
            }
            
return  re;
        }

        
///   <summary>
        
///  获取名人纪念日字符串。
        
///   </summary>
         public   string  GetCommemoration(DateTime solarDateTime)
        {
            
string  re  =   "" ;
            
foreach  ( string  s  in  celebrity)
            {
                
if  (solarDateTime.Month  ==  Convert.ToInt32(s.Substring( 0 2 )))
                {
                    
if  (solarDateTime.Day  ==  Convert.ToInt32(s.Substring( 2 2 )))
                    {
                        re 
=  s.Substring( 4 );
                        
break ;
                    }
                }
            }
            
return  re;
        }

        
///   <summary>
        
///  获取中国农历节日字符串。
        
///   </summary>
         public   string  GetChineseHoliday(DateTime solarDateTime)
        {
            
string  re  =   "" ;
            
int  mon  =  netCalendar.GetMonth(solarDateTime);
            
if  (mon  >=  netCalendar.GetLeapMonth(solarDateTime.Year))
                mon 
-=   1 ;
            
foreach  ( string  s  in  chineseHoliday)
            {
                
if  (mon  ==  Convert.ToInt32(s.Substring( 0 2 )))
                {
                    
if  (netCalendar.GetDayOfMonth(solarDateTime)  ==  Convert.ToInt32(s.Substring( 2 2 )))
                    {
                        re 
=  s.Substring( 4 );
                        
break ;
                    }
                }
            }

            
// 梅雨
             int  y  =  solarDateTime.Year;
            
int  thisD0  =  GetDayOfYear(solarDateTime);
            
int  dG  =  Gan(GetChineseEraOfDay(solarDateTime));
            
int  dZ  =  Zhi(GetChineseEraOfDay(solarDateTime));

            
int  s11  =  ( int )Math.Floor(Term(y,  11 true ));
            
if  (thisD0  >=  s11  &&  thisD0  <  s11  +   10   &&  dG  ==   3 )
                re 
+=   "  入梅 " ;
            
int  s13  =  ( int )Math.Floor(Term(y,  13 true ));
            
if  (thisD0  >=  s13  &&  thisD0  <  s13  +   12   &&  dZ  ==   8 )
                re 
+=   "  出梅 " ;

            
//   "三伏"是指初伏、中伏和末伏,约在7月中旬到8月中旬这一段时间。夏至以后,虽然白天渐短,黑夜渐长,但是一天当中,白天还比黑夜长,每天地面吸收的热量仍比散发的多,近地面的温度也就一天比一天高。到"三伏"期间,地面吸收的热量几乎少于散发的热量,天气也就最热了。再往后,地面吸收的热量开始少于地面散发的热量,温度也就慢慢下降了。所以一年中最热的时候一般出现在夏至的"三伏"。
            
//   从夏至后第三个“庚”日算起,初伏(10天)、中伏(10~20天)、末伏(立秋后的第一个庚日算起,10天),是一年中天气最热的时间。
            
// 夏九九歌谣
            
//   “冬至”数九过冬寒,有的地方也有“夏至”数九过酷暑的歌谣。
            
//   “夏九九歌”:夏至入头九,羽扇握在手;二九一十八,脱冠着罗纱;三九二十七,出门汗欲滴;四九三十六,浑身汗湿透;五九四十五,炎秋似老虎;六九五十四,乘凉进庙祠;七九六十三,床头摸被单;八九七十二,半夜寻被子;九九八十一,开柜拿棉衣 
            
// 三伏
             int  s12  =  ( int )Math.Floor(Term(y,  12 true ));
            
int  s15  =  ( int )Math.Floor(Term(y,  15 true ));
            
int  n  =  (dG  -   7 %   10   +   1 ;
            
if  (n  <=   0 )
                n 
+=   10 ;
            
int  firsrD0  =  thisD0  -  n  +   1 ;
            
if  (firsrD0  >=  s12  +   20   &&  firsrD0  <  s12  +   30 )
                re 
+=   "  初伏第 "   +  n.ToString()  +   " " ;
            
if  (firsrD0  >=  s15  &&  firsrD0  <  s15  +   10 )
                re 
+=   "  末伏第 "   +  n.ToString()  +   " " ;
            
else
            {
                
if  (firsrD0  >=  s12  +   30   &&  firsrD0  <  s12  +   40 )
                    re 
+=   "  中伏第 "   +  n.ToString()  +   " " ;
                
if  (firsrD0  >=  s12  +   40   &&  firsrD0  <  s12  +   50 )
                    re 
+=   "  中伏第 "   +  (n  +   10 ).ToString()  +   " " ;
            }

            
//   "三九"是指冬至后的第三个九天,约在1月中下旬。"三九"天为什么最冷呢?这要从当时地面吸收和散发热量的多少来看,冬季这时候虽然白昼短,地面吸收的太阳辐射热量最少,但此时地面散发的热量还多于吸收的热量,近地面的空气温度还要继续低下去,当地面吸收到的太阳热量几乎等于地面散发的热量,气温才达到最冷。到"三九"以后,地面吸收的热量又将多于地面散失的热量,近地面的空气温度也随着逐渐回升。因此,一年中最冷的时候一般出现在冬至后的"三九"前后。
            
//   冬至这一天开始数九,这就是人们所说的“提冬数九”。数上9天是一九,再数9天是二九……数到“九九”就算“九”尽了,“九尽杨花开”,那时天就暖了。
            
//   人说“冷在九、热在伏”,数九虽冷,但由于我国地域辽阔,冷也冷得不一样:
            
//   黄河中下游的《九九歌》是:一九二九不出手;三九四 九河上走;五九六九沿河望柳;七九开河,八九雁来;九九又一九,耕牛遍地走。
            
//   江南的《九九歌》是:一九二九相见弗出手;三九二十七,篱头吹筚篥(古代的一种乐器,意指寒风吹得篱笆噼噼响声);四九三十六,夜晚如鹭宿(晚上寒冷象白鹤一样卷曲着身体睡眠);五九四十五,太阳开门户,六九五十四,贫儿争意气;七九六十三,布袖担头担;八九七十二,猫儿寻阳地;九九八十一,犁耙一齐出。
            
//   最冷的是三九、四九,在吉林:三九四九冻死狗,在江苏则是“三九四九拾粪老汉满街游”,可见气温相差很大。 
            
// 九九
             int  s24  =  ( int )Math.Floor(Term(y,  24 true ));
            
int  s_24  =  ( int )Math.Floor(Term(y  -   1 24 true ));
            
int  d1  =  thisD0  -  s24;
            DateTime a1 
=   new  DateTime(y  -   1 12 31 );
            
// DateTime a2=new DateTime(y-1,1,0);
             int  d2  =  thisD0  -  s_24  +  a1.DayOfYear  -   1 ;
            
int  w, v;
            
if  (d1  >=   0   ||  d2  <=   80 )
            {
                
if  (solarDateTime.Month  ==   12 )
                {
                    w 
=   1 ;
                    v 
=  d1  +   1 ;
                    
if  (v  >   9 )
                    {
                        w 
+=   1 ;
                        v 
-=   9 ;
                    }
                }
                
else
                {
                    w 
=  ( int )Math.Floor(( double )d2  /   9 +   1 ;
                    v 
=  ( int )Math.Round(rem(d2,  9 ))  +   1 ;
                }
                re 
+=   "   "   +  ToStringWithChineseDay(w).Substring( 1 1 +   " 九第 "   +  v.ToString()  +   " " ;
            }

            
return  re;
        }

        
#region  节日变量
        
private   string [] holiday  = {
            
" 0101元旦 " ,
            
" 0202世界湿地日 " ,
            
" 0207国际声援南非日 " ,
            
" 0210国际气象节 " ,
            
" 0214情人节 " ,
            
" 0301国际海豹日 " ,
            
" 0303全国爱耳日 " ,
            
" 0305学雷锋活动日 " ,
            
" 0308国际妇女节 " ,
            
" 0312植树节 " ,
            
" 0314国际警察日 " ,
            
" 0315消费者权益日 " ,
            
" 0317中国国医节 国际航海日 " ,
            
" 0321世界森林日 消除种族歧视国际日 世界儿歌日 " ,
            
" 0322世界水日 " ,
            
" 0323世界气象日 " ,
            
" 0324世界防治结核病日 " ,
            
" 0325全国中小学生安全教育日 " ,
            
" 0330巴勒斯坦国土日 " ,
            
" 0401愚人节 " ,
            
" 0407世界卫生日 " ,
            
" 0422世界地球日 " ,
            
" 0423世界图书和版权日 " ,
            
" 0424亚非新闻工作者日 " ,
            
" 0501国际劳动节 " ,
            
" 0504五四青年节 " ,
            
" 0505碘缺乏病防治日 " ,
            
" 0508世界红十字日 " ,
            
" 0512国际护士节 " ,
            
" 0515国际家庭日 " ,
            
" 0517世界电信日 " ,
            
" 0518国际博物馆日 " ,
            
" 0520全国学生营养日 " ,
            
" 0523国际牛奶日 " ,
            
" 0531世界无烟日 " ,
            
" 0601国际儿童节 " ,
            
" 0605世界环境日 " ,
            
" 0606全国爱眼日 " ,
            
" 0617防治荒漠化和干旱日 " ,
            
" 0623国际奥林匹克日 " ,
            
" 0625全国土地日 " ,
            
" 0626国际反毒品日 " ,
            
" 0701党的生日 香港回归纪念日 世界建筑日 " ,
            
" 0702国际体育记者日 " ,
            
" 0707中国人民抗日战争纪念日 " ,
            
" 0711世界人口日 " ,
            
" 0730非洲妇女日 " ,
            
" 0801八一建军节 " ,
            
" 0908国际扫盲日 " ,
            
" 0910中国教师节 " ,
            
" 0914世界清洁地球日 " ,
            
" 0916国际和平日 国际臭氧层保护日 " ,
            
" 0918九·一八事变纪念日 " ,
            
" 0920作者的生日 国际爱牙日 " ,
            
" 0927世界旅游日 " ,
            
" 1001国庆节 国际音乐日 国际老人节 " ,
            
" 1002国际和平与民主自由斗争日 " ,
            
" 1004世界动物日 " ,
            
" 1005世界住房日 " ,
            
" 1008全国高血压日 世界视觉日 " ,
            
" 1009世界邮政日 " ,
            
" 1010辛亥革命纪念日 世界精神卫生日 " ,
            
" 1013世界保健日 国际教师节 " ,
            
" 1014世界标准日 " ,
            
" 1015国际盲人节(白手杖节) " ,
            
" 1016世界粮食日 " ,
            
" 1017世界消除贫困日 " ,
            
" 1022世界传统医药日 " ,
            
" 1024联合国日 世界发展信息日 " ,
            
" 1031世界勤俭日 万圣节前夜 " ,
            
" 1107十月社会主义革命纪念日 " ,
            
" 1108中国记者日 " ,
            
" 1109全国消防安全宣传教育日 " ,
            
" 1110世界青年节 " ,
            
" 1114世界糖尿病日 " ,
            
" 1117国际大学生节 世界学生节 " ,
            
" 1121世界问候日 世界电视日 " ,
            
" 1129国际声援巴勒斯坦人民国际日 " ,
            
" 1201世界爱滋病日 " ,
            
" 1203世界残疾人日 " ,
            
" 1205国际经济和社会发展志愿人员日 " ,
            
" 1208国际儿童电视日 " ,
            
" 1209纪念一二·九运动 世界足球日 " ,
            
" 1210世界人权日 " ,
            
" 1212西安事变纪念日 " ,
            
" 1213南京大屠杀(1937年)纪念日!紧记血泪史! " ,
            
" 1221国际篮球日 " ,
            
" 1224平安夜 " ,
            
" 1220澳门回归纪念日 " ,
            
" 1225圣诞节 " ,
            
" 1229国际生物多样性日 "
        };
        
private   string [] chineseHoliday  = {
            
" 0101新年 " ,
            
" 0103天庆节 " ,
            
" 0105五路财神日 " ,
            
" 0108江东神诞 " ,
            
" 0109昊天皇帝诞 " ,
            
" 0111太均娘娘诞 " ,
            
" 01139散花灯 哥升节 " ,
            
" 0115元宵节 " ,
            
" 0116馄饨节 门神诞 " ,
            
" 0119丘处机诞 " ,
            
" 0120女娲补天日 黄道婆祭 " ,
            
" 0125填仓节 " ,
            
" 0127天地水三官诞 " ,
            
" 0202龙头节 太昊伏羲氏祭 " ,
            
" 0203文昌诞 " ,
            
" 0208芳春节 插花节 " ,
            
" 0210彩蛋节 " ,
            
" 0212花朝节 " ,
            
" 0215老子诞 " ,
            
" 0219观音诞 " ,
            
" 0228寒潮节 岱诞 " ,
            
" 0303上巳节 踏青节 " ,
            
" 0305大禹诞 " ,
            
" 0310撒种节 " ,
            
" 0315孙膑诞 龙华会 " ,
            
" 0316蒙恬诞 " ,
            
" 0318中岳节 " ,
            
" 0320鲁班诞 " ,
            
" 0322子孙娘娘诞 " ,
            
" 0323天后玛祖诞 " ,
            
" 0328仓颉先师诞 " ,
            
" 0401清和节 " ,
            
" 0402公输般日 " ,
            
" 0408洗佛放生节 牛王诞 跳月节 " ,
            
" 0410葛洪诞 " ,
            
" 0411孔子祭 " ,
            
" 0414吕洞宾诞 菖蒲日 " ,
            
" 0415钟离权诞 外萨卡佛陀日 " ,
            
" 0417金花女诞 " ,
            
" 0418锡伯迁移节 " ,
            
" 0419浣花日 " ,
            
" 0426炎帝神农氏诞 " ,
            
" 0428扁鹊诞 " ,
            
" 0501女儿节 " ,
            
" 0504采花节 " ,
            
" 0505端午节 " ,
            
" 0511范蠡祭 " ,
            
" 0513关羽诞 " ,
            
" 0522曹娥日 " ,
            
" 0529祖娘节 " ,
            
" 0606天贶节 盘古逝 " ,
            
" 0612彭祖笺铿诞 " ,
            
" 0615捕鱼祭 " ,
            
" 0616爬坡节 " ,
            
" 0619太阳日 观音日 " ,
            
" 0623火神诞 " ,
            
" 0624观莲节 " ,
            
" 0707乞巧节 " ,
            
" 0712地狱开门日 " ,
            
" 0713轩辕诞 " ,
            
" 0715中元节 " ,
            
" 0723诸葛亮诞 " ,
            
" 0727黄老诞 " ,
            
" 0801天医节 " ,
            
" 0803华佗诞 " ,
            
" 0815中秋节 " ,
            
" 0818观潮节 " ,
            
" 0824稻节 " ,
            
" 0909重阳节 " ,
            
" 0913钉鞋日 " ,
            
" 0916伯余诞 " ,
            
" 0919观音逝 " ,
            
" 0930采参节 " ,
            
" 1001送寒衣节 祭祖节 " ,
            
" 1015下元节 文成公主诞 " ,
            
" 1016盘古节 " ,
            
" 1208腊八节 " ,
            
" 1212百福日 蚕花娘娘诞 " ,
            
" 1223洗灶日 " ,
            
" 1224小年 " ,
            
" 1225上帝下界之辰 "
        };
        
private   string [] celebrity  = {
            
" 0104雅各布·格林诞辰 " ,
            
" 0108周恩来逝世纪念日 " ,
            
" 0106圣女贞德诞辰 " ,
            
" 0112杰克·伦敦诞辰 " ,
            
" 0115莫里哀诞辰 " ,
            
" 0117富兰克林诞辰 " ,
            
" 0119瓦特诞辰 " ,
            
" 0122培根诞辰 " ,
            
" 0123郎之万诞辰 " ,
            
" 0127莫扎特诞辰 " ,
            
" 0129罗曼·罗兰诞辰 " ,
            
" 0130甘地诞辰 " ,
            
" 0131舒柏特诞辰 " ,
            
" 0203门德尔松诞辰 " ,
            
" 0207门捷列夫诞辰 " ,
            
" 0211爱迪生诞辰,狄更斯诞辰 " ,
            
" 0212林肯,达尔文诞辰 " ,
            
" 0217布鲁诺诞辰 " ,
            
" 0218伏打诞辰 " ,
            
" 0219哥白尼诞辰 " ,
            
" 0222赫兹,叔本华,华盛顿诞辰 " ,
            
" 0226雨果诞辰 " ,
            
" 0302斯美塔那诞辰 " ,
            
" 0304白求恩诞辰 " ,
            
" 0305周恩来诞辰 " ,
            
" 0306布朗宁,米开朗琪罗诞辰 " ,
            
" 0307竺可桢诞辰 " ,
            
" 0314爱因斯坦诞辰 " ,
            
" 0321巴赫,穆索尔斯基诞辰 " ,
            
" 0322贺龙诞辰 " ,
            
" 0328高尔基诞辰 " ,
            
" 0401海顿,果戈理诞辰 " ,
            
" 0415达·芬奇诞辰 " ,
            
" 0416卓别林诞辰 " ,
            
" 0420祖冲之诞辰 " ,
            
" 0422列宁,康德,奥本海默诞辰 " ,
            
" 0423普朗克,莎士比亚诞辰 " ,
            
" 0430高斯诞辰 " ,
            
" 0505马克思诞辰 " ,
            
" 0507柴可夫斯基,泰戈尔诞辰 " ,
            
" 0511冼星海诞辰 " ,
            
" 0511李比希诞辰 " ,
            
" 0520巴尔扎克诞辰 " ,
            
" 0522瓦格纳诞辰 " ,
            
" 0531惠特曼诞辰 " ,
            
" 0601杜威诞辰 " ,
            
" 0602哈代诞辰 " ,
            
" 0608舒曼诞辰 " ,
            
" 0715伦勃朗诞辰 " ,
            
" 0805阿贝尔诞辰 " ,
            
" 0808狄拉克诞辰 " ,
            
" 0826陈毅诞辰 " ,
            
" 0828歌德诞辰 " ,
            
" 0909***逝世纪念日 " ,
            
" 0925鲁迅诞辰 " ,
            
" 0926巴甫洛夫诞辰 " ,
            
" 0928孔子诞辰 " ,
            
" 0929奥斯特洛夫斯基诞辰 " ,
            
" 1011伯辽兹诞辰 " ,
            
" 1021诺贝尔诞辰 " ,
            
" 1022李斯特诞辰 " ,
            
" 1026伽罗瓦诞辰 " ,
            
" 1029李大钊诞辰 " ,
            
" 1007居里夫人诞辰 " ,
            
" 1108哈雷诞辰 " ,
            
" 1112孙中山诞辰 " ,
            
" 1124刘少奇诞辰 " ,
            
" 1128恩格斯诞辰 " ,
            
" 1201朱德诞辰 " ,
            
" 1205海森堡诞辰 " ,
            
" 1211玻恩诞辰 " ,
            
" 1213海涅诞辰 " ,
            
" 1216贝多芬诞辰 " ,
            
" 1221斯大林诞辰 " ,
            
" 1225牛顿诞辰 " ,
            
" 1226***诞辰 " ,
            
" 1229阿·托尔斯泰诞辰 "
        };
        
#endregion

        
#endregion
    }

    
public   class  SolarTerm
    {
        
private  DateTime solarTermDate;
        
private   string  name;

        
///   <summary>
        
///  节气的时间。
        
///   </summary>
         public  DateTime SolarTermDateTime
        {
            
get
            {
                
return  solarTermDate;
            }
            
set
            {
                solarTermDate 
=  value;
            }
        }

        
///   <summary>
        
///  节气名。
        
///   </summary>
         public   string  Name
        {
            
get
            {
                
return  name;
            }
            
set
            {
                name 
=  value;
            }
        }
    }

    
public   enum  Syzygy
    {
        
///   <summary>
        
///  非朔非望。(即看到不完整的月亮)
        
///   </summary>
        None,
        
///   <summary>
        
///  新月,即朔。
        
///   </summary>
        NewMoon,
        
///   <summary>
        
///  满月,即望。
        
///   </summary>
        FullMoon,
    }

    
public   enum  EclipsePhenomena
    {
        
///   <summary>
        
///  不食。(大概是天狗没有食欲的样子)
        
///   </summary>
        None,
        
///   <summary>
        
///  日食
        
///   </summary>
        EclipseOfSun,
        
///   <summary>
        
///  月全食
        
///   </summary>
        CompleteEclipseOfTheMoon,
        
///   <summary>
        
///  月偏食
        
///   </summary>
        PartialEclipseOfTheMoon,
    }

    
public   class  Eclipse
    {
        
private  DateTime eclipseTime;
        
private  EclipsePhenomena phenomena;
        
private  Syzygy syzygy;

        
///   <summary>
        
///  日食月食的时间
        
///   </summary>
         public  DateTime DateTime
        {
            
get
            {
                
return  eclipseTime;
            }
            
set
            {
                eclipseTime 
=  value;
            }
        }

        
///   <summary>
        
///  日食月食的类型
        
///   </summary>
         public  EclipsePhenomena Phenomena
        {
            
get
            {
                
return  phenomena;
            }
            
set
            {
                phenomena 
=  value;
            }
        }

        
///   <summary>
        
///  朔望
        
///   </summary>
         public  Syzygy Syzygy
        {
            
get
            {
                
return  syzygy;
            }
            
set
            {
                syzygy 
=  value;
            }
        }
    }
}

你可能感兴趣的:(C#)