Magazine

Code du jour: Une brève histoire de date (T)

Publié le 22 avril 2008 par Wtf

Algirdas Kepezinskas était en train de débugger du code d'un client lorsqu’il trouva l'un des plus merveilleux algorithmes de manipulation de date. J'ai enlevé le nom de la fonction, et je vous laisserai comme exercice, d'essayer de trouver ce que ce gros tas d'arithmétique fait ...

private int ?????? (Date date1, Date date2)
{
int retval = 0;
if (date1 > date2) return 0;
int d1 = date1.Year * 10000 + date1.Month * 100 + date1.Day;
int d2 = date2.Year * 10000 + date2.Month * 100 + date2.Day;
int dat = d1 / 100;
int a = 0, d = 0;
while ((dat <= (d2 / 100)) & (a < 12))
{
int daymo = 31;
if (dat/100 == 2) if ((dat%100 %4)==0) daymo -= 2; else daymo -= 3;
if ((dat/100 % 2)==(dat/100 / 8)) daymo -= 1;
if ((d1/100 == dat) || (d2/100 == dat))
{
if (d1/100 == dat) d = daymo - (d1%100)+1;
if (d2/100 == dat)
{
if (d1/100 == d2/100) d -= daymo - d2%100;
else d = d2%100;
}
}
else d = daymo;
retval += d;
if (dat%100 == 12) dat = (dat/100 + 1)*100 + 1;
else dat += 1;
a +=1;
}
return retval;
}

On abandonne déjà? Je vous donne un indice : la seule ligne de code avec laquelle Algirdas remplaça la fonction ...

return (date1 - date2);

Retour à La Une de Logo Paperblog

A propos de l’auteur


Wtf 169 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte