fork download
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.Net;
  6.  
  7. public class Test
  8. {
  9.  
  10. public static void Main()
  11. {
  12. List<DateTime> dtlist = new List<DateTime>();
  13. dtlist.Add(new DateTime(1985, 07, 25));
  14. dtlist.Add(new DateTime(1956, 12, 31));
  15. dtlist.Add(new DateTime(1978, 02, 21));
  16. dtlist.Add(new DateTime(2005, 03, 18));
  17.  
  18. DateTime now = DateTime.Today;
  19. dtlist.Sort((d1, d2) =>
  20. {
  21. if (DateTime.IsLeapYear(d1.Year) && d1.Month == 2 && d1.Day == 29)
  22. d1 = d1.Date.AddMilliseconds((-1) * 1);
  23. if (DateTime.IsLeapYear(d2.Year) && d2.Month == 2 && d2.Day == 29)
  24. d2 = d2.Date.AddMilliseconds((-1) * 1);
  25. var dtTrunc1 = new DateTime(now.Year, d1.Month, d1.Day, d1.Hour, d1.Minute, d1.Second, d1.Millisecond);
  26. var dtTrunc2 = new DateTime(now.Year, d2.Month, d2.Day, d2.Hour, d2.Minute, d2.Second, d2.Millisecond);
  27. TimeSpan diff1 = dtTrunc1 - now;
  28. TimeSpan diff2 = dtTrunc2 - now;
  29. if (diff1.Ticks >= 0 && diff2.Ticks >= 0 || diff1.Ticks < 0 && diff2.Ticks < 0)
  30. return diff1.Ticks.CompareTo(diff2.Ticks);
  31. else if (diff1.Ticks < 0 && diff2.Ticks >= 0)
  32. return int.MaxValue;
  33. else
  34. return int.MinValue;
  35. });
  36. foreach(var dt in dtlist)Console.WriteLine(dt);
  37. }
  38. }
  39.  
  40.  
  41.  
Success #stdin #stdout 0.04s 33928KB
stdin
Standard input is empty
stdout
3/18/2005 12:00:00 AM
7/25/1985 12:00:00 AM
12/31/1956 12:00:00 AM
2/21/1978 12:00:00 AM