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) !