uint d;
//2017-2000 = 17
d = year-2000; // 17
d = d * 1000; // 1700
d = d + month; // 1709
d = d * 1000; // 170900
d = d + day; // 170922
d = d * 10000;
d est un entier non signé sur 16 bits. Domaine de validité 0 a 65535
Hors avec tes calculs on est largement en dehors du domaine de validité
Déclare la variable d en unsigned long et ça devrait aller mieux