Bonjour à toutes et à tous,
Dans une application autour d'un ESP32, j'utilise la librairie time.h pour en extraire la date et l'heure.
Dans un exemple, il y a les instructions suivantes :
struct tm timeinfo;
getLocalTime(&timeinfo);
Serial.println(&timeinfo, "%d/%m/%Y %H:%M:%S");
Ce qui me donne : 21/12/2024 20:18:16 --> correct
J'essaie un autre formatage pour obtenir une chaîne :
Serial.printf("%02u/%02u/%04u %02u:%02u:%02u", timeinfo.tm_mday, timeinfo.tm_mon, &timeinfo.tm_year, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
et là, j'obtiens : 21/11/124 20:18:16 --> mois et année incorrects.
sachant que dans la structure timeinfo, ses composantes sont des entiers :
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
#ifdef __TM_GMTOFF
long __TM_GMTOFF;
#endif
#ifdef __TM_ZONE
const char *__TM_ZONE;
#endif
};
et que si je les affiche un par un, j'obtiens 11 pour le mois et 124 pour l'année.
J'en conclus donc Serial.println() possède des formateurs spécifiques pour cette strructure car, si j'emploie ces formateurs dans un sprintf ou printf, j'obtiens les mauvaises valeurs.
Comment récupérer une chaîne représentant la date et l'heure avec le bon format ? Y a-t-il une instruction qui permette d'obtenir le formatage donné par println() ?
Cordialement.
Pierre.