using System;
using System.Linq;
using System.Collections.Generic;
using System.Globalization;
using System.Net;
public class Test
{
public static void Main()
{
List<DateTime> dtlist = new List<DateTime>();
dtlist.Add(new DateTime(1985, 07, 25));
dtlist.Add(new DateTime(1956, 12, 31));
dtlist.Add(new DateTime(1978, 02, 21));
dtlist.Add(new DateTime(2005, 03, 18));
DateTime now = DateTime.Today;
dtlist.Sort((d1, d2) =>
{
if (DateTime.IsLeapYear(d1.Year) && d1.Month == 2 && d1.Day == 29)
d1 = d1.Date.AddMilliseconds((-1) * 1);
if (DateTime.IsLeapYear(d2.Year) && d2.Month == 2 && d2.Day == 29)
d2 = d2.Date.AddMilliseconds((-1) * 1);
var dtTrunc1 = new DateTime(now.Year, d1.Month, d1.Day, d1.Hour, d1.Minute, d1.Second, d1.Millisecond);
var dtTrunc2 = new DateTime(now.Year, d2.Month, d2.Day, d2.Hour, d2.Minute, d2.Second, d2.Millisecond);
TimeSpan diff1 = dtTrunc1 - now;
TimeSpan diff2 = dtTrunc2 - now;
if (diff1.Ticks >= 0 && diff2.Ticks >= 0 || diff1.Ticks < 0 && diff2.Ticks < 0)
return diff1.Ticks.CompareTo(diff2.Ticks);
else if (diff1.Ticks < 0 && diff2.Ticks >= 0)
return int.MaxValue;
else
return int.MinValue;
});
foreach(var dt in dtlist)Console.WriteLine(dt);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5HbG9iYWxpemF0aW9uOwp1c2luZyBTeXN0ZW0uTmV0OwoKcHVibGljIGNsYXNzIFRlc3QKewogIAoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgICAgICAgTGlzdDxEYXRlVGltZT4gZHRsaXN0ID0gbmV3IExpc3Q8RGF0ZVRpbWU+KCk7CiAgICAgICAgICAgIGR0bGlzdC5BZGQobmV3IERhdGVUaW1lKDE5ODUsIDA3LCAyNSkpOwogICAgICAgICAgICBkdGxpc3QuQWRkKG5ldyBEYXRlVGltZSgxOTU2LCAxMiwgMzEpKTsKICAgICAgICAgICAgZHRsaXN0LkFkZChuZXcgRGF0ZVRpbWUoMTk3OCwgMDIsIDIxKSk7CiAgICAgICAgICAgIGR0bGlzdC5BZGQobmV3IERhdGVUaW1lKDIwMDUsIDAzLCAxOCkpOwogICAgICAgICAgICAKICAgICAgICBEYXRlVGltZSBub3cgPSBEYXRlVGltZS5Ub2RheTsKICAgICAgICAgICAgZHRsaXN0LlNvcnQoKGQxLCBkMikgPT4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZVRpbWUuSXNMZWFwWWVhcihkMS5ZZWFyKSAmJiBkMS5Nb250aCA9PSAyICYmIGQxLkRheSA9PSAyOSkKICAgICAgICAgICAgICAgICAgICAgICAgZDEgPSBkMS5EYXRlLkFkZE1pbGxpc2Vjb25kcygoLTEpICogMSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKERhdGVUaW1lLklzTGVhcFllYXIoZDIuWWVhcikgJiYgZDIuTW9udGggPT0gMiAmJiBkMi5EYXkgPT0gMjkpCiAgICAgICAgICAgICAgICAgICAgICAgIGQyID0gZDIuRGF0ZS5BZGRNaWxsaXNlY29uZHMoKC0xKSAqIDEpOwogICAgICAgICAgICAgICAgICAgIHZhciBkdFRydW5jMSA9IG5ldyBEYXRlVGltZShub3cuWWVhciwgZDEuTW9udGgsIGQxLkRheSwgZDEuSG91ciwgZDEuTWludXRlLCBkMS5TZWNvbmQsIGQxLk1pbGxpc2Vjb25kKTsKICAgICAgICAgICAgICAgICAgICB2YXIgZHRUcnVuYzIgPSBuZXcgRGF0ZVRpbWUobm93LlllYXIsIGQyLk1vbnRoLCBkMi5EYXksIGQyLkhvdXIsIGQyLk1pbnV0ZSwgZDIuU2Vjb25kLCBkMi5NaWxsaXNlY29uZCk7CiAgICAgICAgICAgICAgICAgICAgVGltZVNwYW4gZGlmZjEgPSBkdFRydW5jMSAtIG5vdzsKICAgICAgICAgICAgICAgICAgICBUaW1lU3BhbiBkaWZmMiA9IGR0VHJ1bmMyIC0gbm93OwogICAgICAgICAgICAgICAgICAgIGlmIChkaWZmMS5UaWNrcyA+PSAwICYmIGRpZmYyLlRpY2tzID49IDAgfHwgZGlmZjEuVGlja3MgPCAwICYmIGRpZmYyLlRpY2tzIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYxLlRpY2tzLkNvbXBhcmVUbyhkaWZmMi5UaWNrcyk7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGlmZjEuVGlja3MgPCAwICYmIGRpZmYyLlRpY2tzID49IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnQuTWF4VmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50Lk1pblZhbHVlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGZvcmVhY2godmFyIGR0IGluIGR0bGlzdClDb25zb2xlLldyaXRlTGluZShkdCk7Cgl9ICAgCn0KCiAgICAK