失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 阴阳历互相转换方法

阴阳历互相转换方法

时间:2022-05-20 19:27:58

相关推荐

阴阳历互相转换方法

#region 阴历转阳历/// <summary>/// 获取指定年份春节当日(正月初一)的阳历日期/// </summary>/// <param name="year">指定的年份</param>private DateTime GetLunarNewYearDate(int year){DateTime dt = new DateTime(year, 1, 1);int cnYear = calendar.GetYear(dt);int cnMonth = calendar.GetMonth(dt);int num1 = 0;int num2 = calendar.IsLeapYear(cnYear) ? 13 : 12;while (num2 >= cnMonth){num1 += calendar.GetDaysInMonth(cnYear, num2--);}num1 = num1 - calendar.GetDayOfMonth(dt) + 1;return dt.AddDays(num1);}/// <summary>/// 阴历转阳历/// </summary>/// <param name="year">阴历年</param>/// <param name="month">阴历月</param>/// <param name="day">阴历日</param>/// <param name="IsLeapMonth">是否闰月</param>public DateTime GetDateFromLunarDate(int year, int month, int day, bool IsLeapMonth){if (year < 1902 || year > 2100)throw new Exception("只支持1902~2100期间的农历年");if (month < 1 || month > 12)throw new Exception("表示月份的数字必须在1~12之间");if (day < 1 || day > calendar.GetDaysInMonth(year, month))throw new Exception("农历日期输入有误");int num1 = 0, num2 = 0;int leapMonth = calendar.GetLeapMonth(year);if (((leapMonth == month + 1) && IsLeapMonth) || (leapMonth > 0 && leapMonth <= month))num2 = month;elsenum2 = month - 1;while (num2 > 0){num1 += calendar.GetDaysInMonth(year, num2--);}DateTime dt = GetLunarNewYearDate(year);return dt.AddDays(num1 + day - 1);}/// <summary>/// 阴历转阳历/// </summary>/// <param name="date">阴历日期</param>/// <param name="IsLeapMonth">是否闰月</param>public DateTime GetDateFromLunarDate(DateTime date, bool IsLeapMonth){return GetDateFromLunarDate(date.Year, date.Month, date.Day, IsLeapMonth);}#endregion#region 阳历转阴历public string SolarToChineseLunisolarDate(DateTime solarDateTime){System.Globalization.ChineseLunisolarCalendar cal = new System.Globalization.ChineseLunisolarCalendar();int year = cal.GetYear(solarDateTime);int month = cal.GetMonth(solarDateTime);int day = cal.GetDayOfMonth(solarDateTime);int leapMonth = cal.GetLeapMonth(year);return string.Format("农历{0}{1}({2})年{3}{4}月{5}{6}", "甲乙丙丁戊己庚辛壬癸"[(year - 4) % 10], "子丑寅卯辰巳午未申酉戌亥"[(year - 4) % 12], "鼠牛虎兔龙蛇马羊猴鸡狗猪"[(year - 4) % 12], month == leapMonth ? "闰" : "", "无正二三四五六七八九十冬腊"[leapMonth > 0 && leapMonth <= month ? month - 1 : month], "初十廿三"[day / 10], "日一二三四五六七八九"[day % 10]);}#endregion

阳历转阴历

#region 阳历转阴历public string SolarToChineseLunisolarDate(DateTime solarDateTime){System.Globalization.ChineseLunisolarCalendar cal = new System.Globalization.ChineseLunisolarCalendar();int year = cal.GetYear(solarDateTime);int month = cal.GetMonth(solarDateTime);int day = cal.GetDayOfMonth(solarDateTime);int leapMonth = cal.GetLeapMonth(year);return string.Format("农历{0}{1}({2})年{3}{4}月{5}{6}", "甲乙丙丁戊己庚辛壬癸"[(year - 4) % 10], "子丑寅卯辰巳午未申酉戌亥"[(year - 4) % 12], "鼠牛虎兔龙蛇马羊猴鸡狗猪"[(year - 4) % 12], month == leapMonth ? "闰" : "", "无正二三四五六七八九十冬腊"[leapMonth > 0 && leapMonth <= month ? month - 1 : month], "初十廿三"[day / 10], "日一二三四五六七八九"[day % 10]);}#endregion

调用方法:

//阴历转阳历public void GetDayFromLunarDate(DateTime time){ChineseCalendar cc = new ChineseCalendar(time);cc.GetDateFromLunarDate(time, true);}//阳历转阴历public void GetLunarDateFromDay(DateTime time){ChineseCalendar cc = new ChineseCalendar(time);string LunarDate = cc.SolarToChineseLunisolarDate(time);}

如果觉得《阴阳历互相转换方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。