RTC DS3231 asctime non compatible

Bonjour,
J'ai remarqué que la fonction asctime n'était pas compatible avec le DS3231, si on récupère la structure du DS3231 dans une struct de type tm (ex struct tm dt).

DS3231 stocke l'année de 0 a 99, dans mon application j'ajoute toujours 1900, ca fonctionne.

dans mon application je gére quand c'est inférieur à 2000.

if (year >= 2000) {      
        year_full = year - 2000;
    } else {     
        year_full = year - 1900;
    }

dans le DS3231 l'année se positionné à 65 si j'entre 1965,
quand je récupère la structure du DS3231 (jour,mois,annee,heure,minute,seconde dans une structure tm, j'ajoute 100, je me retrouve à 165,
j'ajoute 1900 et c'est ok.

mais asctime m'ajoutera 165 + 1900, ce qui fera 2065 au lieu de 1965.

je ne vois pas comment résoudre le problème.
soit je n'utilise pas asctime dans ma librairie pour afficher la date et heure.
soit je force l'année entre 2000 et 2099 sans utiliser asctime pour un affichage par exemple.

je n'utilise pas de librairie déjà existante je préfère faire ma propre librairie.

j'ai vu que certaines librairies prenait en compte la date >= 2000 uniquement et d'autre < 2000 aussi, mais il n'utilise pas asctime, il créer leur propre affichage de la date, je pense que je ferai cela. et je limiterai la date entre 2000 et 2099.

Merci.

j'ai résolu mon problème pour asctime.
dans asctime wday commence a 0, sur le DS3231 à 1.

bool DS3231_Asctime(void)
{
	
	struct tm dt;

     // Read date/time from RTC
    if (!DS3231_read(&dt)) {
        return false;
    }

    dt.tm_mon = dt.tm_mon - 1;
    if(dt.tm_wday == 7)        
	    dt.tm_wday = 0;
    else
        dt.tm_wday -= 1;

	printf("\r\n%s\r\n", (char *)asctime(&dt));
    return true;
}

Je me pose la question, après 2099 les module RTC ne seront plus valable ?
La plus part des bibliothèque ajoute 1900 à l'année, comme sur le DS3231 l'année est de 0 à 99.

etant donnée la formule:

année % 100 dans année du DS3231
pour lire
année du DS3231 + 100 + 1900.

2100 % 100 = 21
21 + 100 = 121
121 + 1900 = 2021

C'est comme cela que fonctionne asctime.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.