public void testFix() { Assert.AreEqual("2020-01-01 元旦节 2020-01-01", HolidayUtil.getHoliday("2020-01-01") + "", "LunarCore.util.HolidayUtil.fix 有错。"); // 将2020-01-01修改为春节 HolidayUtil.fix("202001011120200101"); Assert.AreEqual("2020-01-01 春节 2020-01-01", HolidayUtil.getHoliday("2020-01-01") + "", "LunarCore.util.HolidayUtil.fix 有错。"); // 追加2099-01-01为元旦节 HolidayUtil.fix("209901010120990101"); Assert.AreEqual("2099-01-01 元旦节 2099-01-01", HolidayUtil.getHoliday("2099-01-01") + "", "LunarCore.util.HolidayUtil.fix 有错。"); // 将2020-01-01修改为春节,并追加2099-01-01为元旦节 HolidayUtil.fix("202001011120200101209901010120990101"); Assert.AreEqual("2020-01-01 春节 2020-01-01", HolidayUtil.getHoliday("2020-01-01") + "", "LunarCore.util.HolidayUtil.fix 有错。"); Assert.AreEqual("2099-01-01 元旦节 2099-01-01", HolidayUtil.getHoliday("2099-01-01") + "", "LunarCore.util.HolidayUtil.fix 有错。"); // 更改节假日名称 string[] names = HolidayUtil.NAMES; names[0] = "元旦"; names[1] = "大年初一"; HolidayUtil.fix(names, null); Assert.AreEqual("2020-01-01 大年初一 2020-01-01", HolidayUtil.getHoliday("2020-01-01") + "", "LunarCore.util.HolidayUtil.fix 有错。"); Assert.AreEqual("2099-01-01 元旦 2099-01-01", HolidayUtil.getHoliday("2099-01-01") + "", "LunarCore.util.HolidayUtil.fix 有错。"); // 追加节假日名称和数据 names = new string[12]; for (int i = 0, j = HolidayUtil.NAMES.Length; i < j; i++) { names[i] = HolidayUtil.NAMES[i]; } names[9] = "我的生日"; names[10] = "结婚纪念日"; names[11] = "她的生日"; HolidayUtil.fix(names, "20210529912021052920211111:12021111120211201;120211201"); Assert.AreEqual("2021-05-29 我的生日 2021-05-29", HolidayUtil.getHoliday("2021-05-29") + "", "LunarCore.util.HolidayUtil.fix 有错。"); Assert.AreEqual("2021-11-11 结婚纪念日 2021-11-11", HolidayUtil.getHoliday("2021-11-11") + "", "LunarCore.util.HolidayUtil.fix 有错。"); Assert.AreEqual("2021-12-01 她的生日 2021-12-01", HolidayUtil.getHoliday("2021-12-01") + "", "LunarCore.util.HolidayUtil.fix 有错。"); }
/// <summary> /// 获取往后推几天的阳历日期,如果要往前推,则天数用负数 /// </summary> /// <param name="days">天数</param> /// <param name="onlyWorkday">是否仅工作日</param> /// <returns>阳历日期</returns> public Solar next(int days, bool onlyWorkday) { DateTime c = new DateTime(year, month, day, hour, minute, second); if (0 != days) { if (!onlyWorkday) { c = c.AddDays(days); } else { int rest = Math.Abs(days); int add = days < 1 ? -1 : 1; while (rest > 0) { c = c.AddDays(add); bool work = true; Holiday holiday = HolidayUtil.getHoliday(c.Year, c.Month, c.Day); if (null == holiday) { string week = c.DayOfWeek.ToString("d"); if ("0".Equals(week) || "6".Equals(week)) { work = false; } } else { work = holiday.isWork(); } if (work) { rest--; } } } } return(new Solar(c)); }