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  }