private (DateTimeOffset nextIntervalStart, DateTimeOffset nextIntervalEnd) SwitchToNextInterval( GeneratorLimitOptions limitOption, DateTimeOffset previousIntervalEnd, TimeSpan intervalLength, DateTimeOffset EndLimit, DateTimeOffset openHour, DateTimeOffset closeHour) { var nextIntervalStart = previousIntervalEnd; if (limitOption == GeneratorLimitOptions.LimitPerHour) { if (nextIntervalStart.TimeOfDay < openHour.TimeOfDay) { nextIntervalStart = nextIntervalStart.Date + openHour.TimeOfDay; } if (closeHour.TimeOfDay <= nextIntervalStart.TimeOfDay) { nextIntervalStart = nextIntervalStart.AddDays(1).Date + openHour.TimeOfDay; } } var nextIntervalEnd = EndLimit <= (nextIntervalStart + intervalLength) ? EndLimit : (nextIntervalStart + intervalLength); if (nextIntervalStart > nextIntervalEnd) { nextIntervalEnd = nextIntervalStart + intervalLength; } return(nextIntervalStart, nextIntervalEnd); }
private TimeSpan GetDivisionInterval(GeneratorLimitOptions limitOptions, DateTimeOffset startDate, DateTimeOffset endDate) { switch (limitOptions) { case GeneratorLimitOptions.LimitPerHour: return(TimeSpan.FromHours(1)); case GeneratorLimitOptions.LimitPerDay: return(TimeSpan.FromDays(1)); case GeneratorLimitOptions.LimitPerMonth: return(TimeSpan.FromDays(30)); case GeneratorLimitOptions.LimitPerCampaign: default: return(endDate - startDate); } }