private static IEnumerable <int> GetTargetMonths(IFixedHolidayFunc func) { var targetMonths = new List <int>(); if (func.FromDate.HasValue && func.ToDate.HasValue) { var fromMonth = func.FromDate.Value.Month; var toMonth = func.ToDate.Value.Month; if (fromMonth > toMonth) { targetMonths.AddRange(Numbers.GetMembersBetween(1, toMonth)); targetMonths.AddRange(Numbers.GetMembersBetween(fromMonth, 12)); } else { targetMonths.AddRange(Numbers.GetMembersBetween(fromMonth, toMonth)); } } else { targetMonths.Add(func.Month); } return(targetMonths.Where(x => x >= 1 && x <= 12)); }
/// <summary> /// Contains<br /> /// 包含 /// </summary> /// <param name="func">An instance of <see cref="IFixedHolidayFunc"/>.</param> /// <returns></returns> public bool Contains(IFixedHolidayFunc func) { if (func == null) { return(false); } if (_fixedHolidayFuncs.Any(x => x.I18NIdentityCode == func.I18NIdentityCode)) { return(true); } // if (_fixedHolidayFuncs.Any(x => x.Name == func.Name && x.Country == func.Country && x.BelongsToCountry == func.BelongsToCountry)) // return true; // if (func.FromDate.HasValue && func.ToDate.HasValue) // { // if (_fixedHolidayFuncs // .Where(x => x.FromDate.HasValue && x.ToDate.HasValue) // .Any(x => // x.FromDate.Value.Month == func.FromDate.Value.Month && x.FromDate.Value.Day == func.FromDate.Value.Day && // x.ToDate.Value.Month == func.ToDate.Value.Month && x.ToDate.Value.Day == func.ToDate.Value.Day)) // return true; // } // else // { // if (_fixedHolidayFuncs // .Where(x => !x.FromDate.HasValue && !x.ToDate.HasValue) // .Any(x => x.Month == func.Month && x.Day == func.Day)) // return true; // } return(false); }
/// <summary> /// Add <see cref="IFixedHolidayFunc"/>.<br /> /// 添加 <see cref="IFixedHolidayFunc"/>。 /// </summary> /// <param name="func">An instance of <see cref="IFixedHolidayFunc"/>.</param> /// <exception cref="ArgumentException">Country code of this func should be same as <see cref="DailyNodeTree"/>.</exception> public void Add(IFixedHolidayFunc func) { if (func == null) { return; } foreach (var month in GetTargetMonths(func)) { _monthDictionary[month].Add(func); } }
/// <summary> /// Add /// </summary> /// <param name="func"></param> public void Add(IFixedHolidayFunc func) { if (func == null) { return; } if (Contains(func)) { return; } _fixedHolidayFuncs.Add(func); }
/// <summary> /// Add <see cref="IFixedHolidayFunc"/> into <see cref="HolidayManager"/>. /// </summary> /// <param name="func">An instance of <see cref="IFixedHolidayFunc"/>.</param> /// <exception cref="ArgumentNullException">The instance of <see cref="IFixedHolidayFunc"/> func should not be null.</exception> /// <exception cref="InvalidOperationException">Failed to add <see cref="IFixedHolidayFunc"/> func.</exception> public void Add(IFixedHolidayFunc func) { _fixedDailyNodeTree.Add(func); }