Si trabajas con formato de fechas del tipo YYYYMMdd, ej 20110324 para el 24 de marzo del 2011, te simplifica la vida (una fecha mayor, siempre es un numero mayor y viceversa)
Lo mismo para horas en formato 0000-2359
Puedes hacer tabla multidimensional anyos, cuantos dias tiene el mes:
byte diasMes[][12] PROGMEM =
{
{31, 28, 31,....,31}, //2011
(31, 29, 31,...,31}, //2012
...
};
Me refiero que te lo puedes "preparar" para que todo te sea mas sencillo....