Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 30th, 2012  |  syntax: None  |  size: 4.94 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Date Range Calculation .Any Suggestions?
  2. public enum MembershipType
  3.        {
  4.           Gym=1,
  5.           Magazine=2,
  6.           Hotel=3
  7.        }
  8.        class Program
  9.        {
  10.           static void Main()
  11.           {
  12.              // During  1st Aug 2011 and 20th Oct 2011 Membership payment must be stopped
  13.              var stopPaymentStartDate  =  new DateTime(2011,08,1);
  14.              var stopPaymentEndDate    =  new DateTime(2011,10,20);
  15.  
  16.  
  17.              var gymMembership = new Membership{MembershipType=MembershipType.Gym, StartDate = new DateTime(2011, 07, 25), EndDate = new DateTime(2011, 10, 10)};
  18.              var magazineMembership = new Membership{MembershipType = MembershipType.Magazine,StartDate = new DateTime(2011, 08, 5),EndDate = new DateTime(2011, 10, 5)};
  19.              var hotelMembership = new Membership{MembershipType = MembershipType.Hotel,StartDate = new DateTime(2011, 08, 20),EndDate = new DateTime(2011, 11, 8)};
  20.  
  21.              //How Can I get the wanted result below:
  22.              //???
  23.  
  24.              //Wanted List of result as follows:
  25.              var gymMembershipResult = new Result{MembershipType = MembershipType.Gym,StartDate = new DateTime(2011, 10, 10),EndDate = new DateTime(2011, 10, 20)};
  26.              var magazineMembershipResultOne = new Result { MembershipType = MembershipType.Magazine, StartDate = new DateTime(2011, 08, 01), EndDate = new DateTime(2011, 08,05) };
  27.              var magazineMembershipResultTwo = new Result { MembershipType = MembershipType.Magazine, StartDate = new DateTime(2011, 10, 05), EndDate = new DateTime(2011, 10, 20) };
  28.              var hotelMembershipResult = new Result { MembershipType = MembershipType.Hotel, StartDate = new DateTime(2011, 08, 01), EndDate = new DateTime(2011, 08, 20) };
  29.  
  30.           }
  31.        }
  32.        public class Result
  33.        {
  34.           public DateTime StartDate { get; set; }
  35.           public DateTime EndDate { get; set; }
  36.           public MembershipType MembershipType { get; set; }
  37.        }
  38.        public class Membership
  39.        {
  40.           public DateTime StartDate { get; set; }
  41.           public DateTime EndDate { get; set; }
  42.           public MembershipType MembershipType { get; set; }
  43.        }
  44.     }
  45.        
  46. class Program
  47. {
  48.     static void Main(string[] args)
  49.     {
  50.         DateTime stopPaymentStartDate = new DateTime(2011, 08, 1);
  51.         DateTime stopPaymentEndDate = new DateTime(2011, 10, 20);
  52.  
  53.         MembershipPeriod gymMembership = new MembershipPeriod
  54.         {
  55.             MembershipType = MembershipType.Gym,
  56.             StartDate = new DateTime(2011, 07, 25),
  57.             EndDate = new DateTime(2011, 10, 10)
  58.         };
  59.  
  60.         MembershipPeriod magazineMembership = new MembershipPeriod
  61.         {
  62.             MembershipType = MembershipType.Magazine,
  63.             StartDate = new DateTime(2011, 08, 5),
  64.             EndDate = new DateTime(2011, 10, 5)
  65.         };
  66.  
  67.         MembershipPeriod hotelMembership = new MembershipPeriod
  68.         {
  69.             MembershipType = MembershipType.Hotel,
  70.             StartDate = new DateTime(2011, 08, 20),
  71.             EndDate = new DateTime(2011, 11, 8)
  72.         };
  73.  
  74.         List<MembershipPeriod> resultsGym = GetResultsForPeriod(gymMembership, stopPaymentStartDate, stopPaymentEndDate);
  75.         List<MembershipPeriod> resultsmagazine = GetResultsForPeriod(magazineMembership, stopPaymentStartDate, stopPaymentEndDate);
  76.         List<MembershipPeriod> resultshotel = GetResultsForPeriod(hotelMembership, stopPaymentStartDate, stopPaymentEndDate);
  77.     }
  78.  
  79.     private static List<MembershipPeriod> GetResultsForPeriod(MembershipPeriod period, DateTime stopPaymentStartDate, DateTime stopPaymentEndDate)
  80.     {
  81.         List<DateTime> datesToKeep = new List<DateTime>();
  82.  
  83.         for (DateTime date = stopPaymentStartDate.Date; date <= stopPaymentEndDate.Date; date = date.AddDays(1))
  84.         {
  85.             if (date <= period.StartDate.Date || date >= period.EndDate.Date)
  86.             {
  87.                 datesToKeep.Add(date);
  88.             }
  89.         }
  90.  
  91.         List<MembershipPeriod> results = new List<MembershipPeriod>();
  92.         MembershipPeriod newPeriod = null;
  93.  
  94.         for (int i = 0; i < datesToKeep.Count; i++)
  95.         {
  96.             if (newPeriod == null)
  97.             {
  98.                 newPeriod = new MembershipPeriod();
  99.                 newPeriod.MembershipType = period.MembershipType;
  100.                 newPeriod.StartDate = datesToKeep[i];
  101.             }
  102.  
  103.             if (i == datesToKeep.Count - 1 || (datesToKeep[i + 1] - datesToKeep[i]).Days > 1)
  104.             {
  105.                 newPeriod.EndDate = datesToKeep[i];
  106.                 results.Add(newPeriod);
  107.                 newPeriod = null;
  108.             }
  109.         }
  110.  
  111.         return results;
  112.     }
  113. }
  114.  
  115. public enum MembershipType
  116. {
  117.     Gym = 1,
  118.     Magazine = 2,
  119.     Hotel = 3
  120. }
  121.  
  122. public class MembershipPeriod
  123. {
  124.     public DateTime StartDate
  125.     {
  126.         get;
  127.         set;
  128.     }
  129.  
  130.     public DateTime EndDate
  131.     {
  132.         get;
  133.         set;
  134.     }
  135.  
  136.     public MembershipType MembershipType
  137.     {
  138.         get;
  139.         set;
  140.     }
  141. }