要求大概就是,選定一段時間周期,勾選周日至周六,把時間周期符合要求的日期返回,例如:勾選了周日,就把時間周期內所有是周日的日期返回,勾選了周日和周五,就把時間周期內所有周五和周日的日期返回。重覆間隔是以時間周期內的星期為單位進行跳選,間隔為0時,每個星期都遍歷,間隔為1時,遍歷完第一周,跳到第三周再 ...
要求大概就是,選定一段時間周期,勾選周日至周六,把時間周期符合要求的日期返回,例如:勾選了周日,就把時間周期內所有是周日的日期返回,勾選了周日和周五,就把時間周期內所有周五和周日的日期返回。重覆間隔是以時間周期內的星期為單位進行跳選,間隔為0時,每個星期都遍歷,間隔為1時,遍歷完第一周,跳到第三周再遍歷,間隔為2時,遍歷完第一周,跳到第四周再遍歷,以此類推。
代碼如下:
![](http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public List<string> VolumeSet(VolumeSetDto input) 2 { 3 GregorianCalendar gc = new GregorianCalendar(); 4 var datesDictionary = new Dictionary<DateTime, DayOfWeek>(); 5 var begin = input.beginTime.Date; 6 while (begin <= input.endTime.Date) 7 { 8 datesDictionary.Add(begin, gc.GetDayOfWeek(begin)); 9 var week = gc.GetDayOfWeek(begin); 10 if (week == DayOfWeek.Saturday) 11 begin = begin.AddDays((7 * (input.interval ?? 0) + 1)); 12 else begin = begin.AddDays(1); 13 } 14 var dates = new List<string>(); 15 foreach (var date in datesDictionary) 16 { 17 if (input.dayWeek != null && input.dayWeek.Count != 0) 18 { 19 if (input.dayWeek.Contains(date.Value)) 20 dates.Add(date.Key.ToString()); 21 } 22 else dates.Add(date.Key.ToString()); 23 } 24 return dates; 25 } 26 27 public class VolumeSetDto 28 { 29 /// <summary> 30 /// 開始時間 31 /// </summary> 32 public DateTime beginTime { get; set; } 33 34 /// <summary> 35 /// 結束時間 36 /// </summary> 37 public DateTime endTime { get; set; } 38 39 /// <summary> 40 /// 間隔周期 41 /// </summary> 42 public int? interval { get; set; } 43 44 /// <summary> 45 /// 選中周幾把枚舉Add進來 46 /// </summary> 47 public List<DayOfWeek> dayWeek { get; set; } 48 }View Code