fork download
  1. using System;
  2. using System.Globalization;
  3. using System.Linq;
  4. using System.Collections.Generic;
  5.  
  6. public class Test
  7. {
  8.  
  9.  
  10. public static void Main()
  11. {
  12. var date = new DateTime(2013, 07, 22);
  13. var posibleDays = new[]{DayOfWeek.Tuesday,DayOfWeek.Wednesday,DayOfWeek.Friday};
  14. var nearestDay = posibleDays.Select(dow => new {
  15. DayOfWeek = dow,
  16. Diff = (7 + (dow - date.DayOfWeek)) % 7
  17. })
  18. .Where(x => x.Diff >= 1)
  19. .OrderBy(x => x.Diff)
  20. .FirstOrDefault();
  21. Console.WriteLine("date:{0} nearest:{1} diff:{2}", date.ToString(), nearestDay.DayOfWeek,nearestDay.Diff);
  22.  
  23. date = new DateTime(2013, 07, 23);
  24. posibleDays = new[]{DayOfWeek.Tuesday,DayOfWeek.Wednesday,DayOfWeek.Thursday,DayOfWeek.Saturday};
  25. nearestDay = posibleDays.Select(dow => new {
  26. DayOfWeek = dow,
  27. Diff = (7 + (dow - date.DayOfWeek)) % 7
  28. })
  29. .Where(x => x.Diff >= 1)
  30. .OrderBy(x => x.Diff)
  31. .FirstOrDefault();
  32. Console.WriteLine("date:{0} nearest:{1} diff:{2}", date.ToString(), nearestDay.DayOfWeek,nearestDay.Diff);
  33.  
  34. date = new DateTime(2013, 07, 24);
  35. posibleDays = new[]{DayOfWeek.Monday, DayOfWeek.Tuesday};
  36. nearestDay = posibleDays.Select(dow => new {
  37. DayOfWeek = dow,
  38. Diff = (7 + (dow - date.DayOfWeek)) % 7
  39. })
  40. .Where(x => x.Diff >= 1)
  41. .OrderBy(x => x.Diff)
  42. .FirstOrDefault();
  43. Console.WriteLine("date:{0} nearest:{1} diff:{2}", date.ToString(), nearestDay.DayOfWeek,nearestDay.Diff);
  44. }
  45. }
Success #stdin #stdout 0.08s 34320KB
stdin
Standard input is empty
stdout
date:7/22/2013 12:00:00 AM nearest:Tuesday diff:1
date:7/23/2013 12:00:00 AM nearest:Wednesday diff:1
date:7/24/2013 12:00:00 AM nearest:Monday diff:5