finddate[data:{{{_Integer, _Integer, _Integer}, _}..},
date:{_Integer, _Integer, _Integer}] :=
First[Extract[data, (Position[#1, First[Nearest[#1, AbsoluteTime[date]]]] & )[
AbsoluteTime/@ data[[All,1]]]]]
будет делать то, что вы хотите.
Например.,
finddate[{{{2002, 4, 10}, 9.61}, {{2002, 4, 11}, 9.53}, {{2002, 4, 12}, 9.58}},
{2012, 3, 17}]
дает {{2002, 4, 12}, 9,58}
Это кажется достаточно быстрым (полсекунды для 10 ^ 5 дат).