Not really a fan of the String Classfor arduino...
Here's my take on it:
struct fechaHora {
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
char valid;
};
int str2num(char *str, const int len) {
char temp[len + 1];
memcpy (temp, str, len);
temp[len] = '\0';
return atoi(temp);
}
void setup() {
struct fechaHora dateTime;
char bufferRX[] = "$DT 20211028225443,V*46";
dateTime.year = str2num(&bufferRX[4], 4);
dateTime.month = str2num(&bufferRX[8], 2);
dateTime.day = str2num(&bufferRX[10], 2);
dateTime.hour = str2num(&bufferRX[12], 2);
dateTime.minute = str2num(&bufferRX[14], 2);
dateTime.second = str2num(&bufferRX[16], 2);
dateTime.valid = bufferRX[19];
Serial.println(dateTime.year);
Serial.println(dateTime.month);
Serial.println(dateTime.day);
Serial.println(dateTime.hour);
Serial.println(dateTime.minute);
Serial.println(dateTime.second);
Serial.println(dateTime.valid);
}
void loop() {
//nothing here (for now!)
}
Hope that helps...