La domanda è banale, come faccio a calcolare i giorni che intercorrono fra due date ? Sembra proprio una banalità, ma in realtà nasconda parecchie insidie.
Infatti, l'oggetto DateTime contiene non solo la data, ma anche l'ora i minuti e secondi. Quindi, se calcolo i giorni che ci sono fra adesso (mentre scrivo) e domani (il 7 gennaio 2005), mi dirà 0 e non 1 (è domani). Potrei usare TimeSpan, peccato che se faccio la comparazione fra due date di anni differenti iniziano a sorgere parecchie eccezzioni.
Bene, quale soluzione ? In questa fase mi limito al calendario Gregoriano (non voglio complicarmi troppo la vita) e prendo come riferimento una data, es 1 marzo 1600. Quindi applico la formula di Gauss (sembra proprio sia stata attribuita a lui) per calcolare il numero di giorni astronomici:
int Days(DateTime time)
{
int d = time.Day;
int m = time.Month;
int y = time.Year;
if ((m -= 2) <= 0)
{
m += 12;
y--;
}
y -= 1600;
int cy = y / 100;
return 365 * y + y / 4 - cy + cy / 4 + 367 * m / 12 + d - 31;
}
Alla fine basta fare la differenza fra due date
Days(timeStart) - Days(timeEnd);
Il gioco è fatto ! Ora potrò sapere se il mio appuntamento è domani veramente (cioè fra 9 ore) !