Is there anything wrong with just subtracting the date times in your list with the datetime.now gives you? it returns a TimeSpan but you can get the seconds from that (all the way down to ms if you want that accuracy). Then just take the absolute value of the difference between the two if you are expecting to receive date times that are in the future in your list of DateTimes. Then use linq to order and grab the first one.
public static void Main(string[] args)
{
var now = DateTime.Now;
var dates = new List<DateTime>
{
new DateTime(2014, 1, 1),
new DateTime(2015, 1, 1),
new DateTime(2016, 1, 1),
new DateTime(2017, 1, 1),
new DateTime(2018, 1, 1),
new DateTime(2019, 1, 1),
new DateTime(2020, 1, 1),
new DateTime(2020, 4, 30),
new DateTime(2021, 1, 1)
};
var minDate = dates.OrderBy(x => Math.Abs((now - x).TotalSeconds)).First();
}