210 /// <summary>
211 /// 某年第N个节气的交气日期
212 /// </summary>
213 /// <param name="year"></param>
214 /// <param name="n"></param>
215 /// <returns></returns>
216 public static DateTime GetJiaoQiDate(int year, int n)
217 {
218 int month=1;
219 month = Convert.ToInt32((n+1) / 2);
220 return Convert.ToDateTime(year.ToString() + "-" + month.ToString() + "-" + GetJiaoQiDay(year, n).ToString());
221 }
222 #endregion
223 #region 农历方法
224 /// <summary>
225 /// 农历X年
226 /// </summary>
227 /// <param name="tim"></param>
228 /// <returns></returns>
229 public static int[] GetNongYear(DateTime tim)
230 {
231 ChineseLunisolarCalendar clc = new ChineseLunisolarCalendar();
232 int y=clc.GetYear(tim);
233 int[] nYear = {y,GetShengXiao(y)};
234 return nYear;
235 }
236 /// <summary>
237 /// 农历X月
238 /// </summary>
239 /// <param name="tim"></param>
240 /// <returns></returns>
241 public static int[] GetNongMonth(DateTime tim)
242 {
243 ChineseLunisolarCalendar clc = new ChineseLunisolarCalendar();
244 int m = clc.GetMonth(tim);
245 int leepM=clc.GetLeapMonth(GetNongYear(tim)[0]);
246 if (leepM != 0)
247 {
248 if (m < leepM + 1)
249 {
250 int[] month = { m, 0 };
251 return month;
252 }
253 if (m == leepM + 1)
254 {
255 int[] month = { m - 1, 1 };
256 return month;
257 }
258 }
259 int[] monthRt = { m, 0 };
260 return monthRt;
261 }
262 /// <summary>
263 /// 农历X日
264 /// </summary>
265 /// <param name="tim"></param>
266 /// <returns></returns>
267 public static int GetNongDay(DateTime tim)
268 {
269 ChineseLunisolarCalendar clc = new ChineseLunisolarCalendar();
270 return clc.GetDayOfMonth(tim);
271 }
272 /// <summary>
273 /// 农历X年X月X日
274 /// </summary>
275 /// <param name="tim"></param>
276 /// <returns></returns>
277 public static NongLiInfo GetNongli(DateTime tim)
278 {
279 NongLiInfo nlInfo = new NongLiInfo();
280 nlInfo.NongYear = GetNongYear(tim);
281 nlInfo.NongMonth = GetNongMonth(tim);
282 nlInfo.NongDay = GetNongDay(tim);
283 nlInfo.NongShi=GetShiZhi(tim);
284 nlInfo.ShengXiao = GetShengXiao(nlInfo.NongYear[0]);
285 return nlInfo;
286 }
287 #endregion
288 #region 四柱方法
289 ///
290 /// <summary>
291 /// 求年柱编号
292 /// </summary>
293 /// <param name="sDate">阳历日期</param>
294 /// <returns></returns>
295 public static int NianZhu(DateTime sDate)
296 {
297 //1900年是庚子年,编号37
298 int nianZhu = 0;
299 int y = sDate.Year;
300 DateTime lichunDate = GetJiaoQiDate(y,3);
301 TimeSpan daySpan = sDate - lichunDate;
302 int day = Convert.ToInt32(daySpan.TotalDays);
303 //若此日为立春前
304 if (day < 0)
305 {
306 nianZhu = (y - 1900 + 37 - 1)%60;
307 return nianZhu;
308 }


