/// /// 中国阴历及节假日计算 /// public class ChineseCalendar {
private static ChineseLunisolarCalendar clc = new ChineseLunisolarCalendar(); //中国节日汇总 private static List HOLIDAYS = new List() { //公历节日 new ChineseHoliday(1,1,"元旦节",false), new ChineseHoliday(5,1,"劳动节",false), new ChineseHoliday(10,1,"国庆节",false), new ChineseHoliday(10,2,"国庆节",false), new ChineseHoliday(10,3,"国庆节",false), new ChineseHoliday(10,4,"国庆节",false), new ChineseHoliday(10,5,"国庆节",false), new ChineseHoliday(10,6,"国庆节",false), new ChineseHoliday(10,7,"国庆节",false), //阴历节日 new ChineseHoliday(12,30,"春节",true), new ChineseHoliday(1,1,"春节",true), new ChineseHoliday(1,2,"春节",true), new ChineseHoliday(1,3,"春节",true), new ChineseHoliday(1,4,"春节",true), new ChineseHoliday(1,5,"春节",true), new ChineseHoliday(1,6,"春节",true), new ChineseHoliday(5,5,"端午节",true), new ChineseHoliday(8,15,"中秋节",true), }; /// /// 把公历日期转换为阴历日期 /// 这里不直接返回Datetime的原因是阴历有时候2月有30号转换Datetime会出错 /// /// /// public static Tuple ToChineseDate(DateTime date) { /** GetLeapMonth(int year)方法返回一个1到13之间的数字, * 比如:1、该年阴历2月有闰月,则返回3 * 如果:2、该年阴历8月有闰月,则返回9 * GetMonth(DateTime dateTime)返回是当前月份,忽略是否闰月 * 比如:1、该年阴历2月有闰月,2月返回2,闰2月返回3 * 如果:2、该年阴历8月有闰月,8月返回8,闰8月返回9 */ int lyear = clc.GetYear(date); int lmonth = clc.GetMonth(date); int lday = clc.GetDayOfMonth(date); //获取第几个月是闰月,等于0表示本年无闰月 int leapMonth = clc.GetLeapMonth(lyear); if (leapMonth > 0) { if (leapMonth == lmonth) { lmonth--; } else if (lmonth > leapMonth) { lmonth--; } } return new Tuple(lyear, lmonth, lday); } /// /// 根据日期获取节日名称,有可能有的时候一天有2个节日 /// item1=阴历节日,item2=阳历节日 /// /// 公历日期 /// public static Tuple GetTupleHoliday(DateTime date) { string choliday = ""; //阴历、公历节日 string holiday = ""; //公历节日 Tuple cdate = ToChineseDate(date); //找公历节日 foreach (var item in HOLIDAYS.FindAll(p => p.IsLunar == false)) { //月份和日相同则认为是假期 if (item.Month == date.Month && item.Day == date.Day) { holiday = item.Name; break; } } //找阴历节日 foreach (var item in HOLIDAYS.FindAll(p => p.IsLunar == true)) { if (item.Month == cdate.Item2 && item.Day == cdate.Item3) { choliday = item.Name; break; } } return new Tuple(choliday, holiday); } /// /// 根据日期获取节日名称,有可能有的时候一天有2个节日 /// item1=阴历节日,item3=阳历假日 /// /// 公历日期 /// public static string GetHoliday(DateTime date) { string holiday = ""; //节日名称 try { //加这个条件是因为阴历不在这个范围内转换会报错 if (date.Year >= 1902 && date.Year
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?