private static List <MembershipPeriod> GetResultsForPeriod(MembershipPeriod period, DateTime stopPaymentStartDate, DateTime stopPaymentEndDate) { List <DateTime> datesToKeep = new List <DateTime>(); for (DateTime date = stopPaymentStartDate.Date; date <= stopPaymentEndDate.Date; date = date.AddDays(1)) { if (date <= period.StartDate.Date || date >= period.EndDate.Date) { datesToKeep.Add(date); } } List <MembershipPeriod> results = new List <MembershipPeriod>(); MembershipPeriod newPeriod = null; for (int i = 0; i < datesToKeep.Count; i++) { if (newPeriod == null) { newPeriod = new MembershipPeriod(); newPeriod.MembershipType = period.MembershipType; newPeriod.StartDate = datesToKeep[i]; } if (i == datesToKeep.Count - 1 || (datesToKeep[i + 1] - datesToKeep[i]).Days > 1) { newPeriod.EndDate = datesToKeep[i]; results.Add(newPeriod); newPeriod = null; } } return(results); }
static void Main(string[] args) { DateTime stopPaymentStartDate = new DateTime(2011, 08, 1); DateTime stopPaymentEndDate = new DateTime(2011, 10, 20); MembershipPeriod gymMembership = new MembershipPeriod { MembershipType = MembershipType.Gym, StartDate = new DateTime(2011, 07, 25), EndDate = new DateTime(2011, 10, 10) }; MembershipPeriod magazineMembership = new MembershipPeriod { MembershipType = MembershipType.Magazine, StartDate = new DateTime(2011, 08, 5), EndDate = new DateTime(2011, 10, 5) }; MembershipPeriod hotelMembership = new MembershipPeriod { MembershipType = MembershipType.Hotel, StartDate = new DateTime(2011, 08, 20), EndDate = new DateTime(2011, 11, 8) }; List <MembershipPeriod> resultsGym = GetResultsForPeriod(gymMembership, stopPaymentStartDate, stopPaymentEndDate); List <MembershipPeriod> resultsmagazine = GetResultsForPeriod(magazineMembership, stopPaymentStartDate, stopPaymentEndDate); List <MembershipPeriod> resultshotel = GetResultsForPeriod(hotelMembership, stopPaymentStartDate, stopPaymentEndDate); }