Hello, made a datalogger to save some engine data and want to make the date stamp ISO8601 compliant and ran into not knowing how to format the millis() output to only show the last 3 digits and preferably with leading zero's in case it's a number with less then 3 digits, attached code gives me: 2026-05-16T19:47:27.42616 but want to have 2026-05-16T19:47:27.616
void createFile(){
sprintf(folder, "20%02d/%02d-%02d", yy, mo, dd);
sprintf(file, "20%02d/%02d-%02d/%02d-%02d.CSV", yy, mo, dd, hh, mi);
SD.mkdir(folder);
myFile=SD.open(file, FILE_WRITE);
myFile.println("Time,EGT1,EGT2,EGT3,EGT4,Oil_Temp,IAT,Exhaust_Press,Boost,H2O_Press,Oil_Press,Fuel_Press,Volt,RPM,Pinion_RPM,Turbo_RPM");
myFile.close();
}
void writeData() {
if ((writeSD == 1) && (logBit == 0)) {
logBit = 1;
createFile();
startTime = millis();
myFile=SD.open(file, O_WRITE | O_APPEND );
}
if ((writeSD == 1) && (logBit == 1)) {
snprintf(time, sizeof time, "20%02d-%02d-%02dT%02d:%02d:%02d.", yy, mo, dd, hh, mi, ss);
String writedata = "";
writedata += time;
writedata += (millis() - startTime);
writedata += ',';
writedata += egt1;
writedata += ',';
writedata += egt2;
writedata += ',';
writedata += egt3;
writedata += ',';
writedata += egt4;
writedata += ',';
writedata += clt;
writedata += ',';
writedata += iat;
writedata += ',';
writedata += pressure1;
writedata += ',';
writedata += pressure2;
writedata += ',';
writedata += pressure3;
writedata += ',';
writedata += pressure4;
writedata += ',';
writedata += pressure5;
writedata += ',';
writedata += volt;
writedata += ',';
writedata += rpm1;
writedata += ',';
writedata += rpm2;
writedata += ',';
writedata += rpm3;
myFile.println(writedata);
myFile.flush(); // save to card every line to prevent data loss
}
if ((writeSD == 0) && (logBit == 1)) {
myFile.close();
logBit = 0;
}
}