Comment récupérer un uint_32 avec une fonction

    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