@donald0000 wants the Date Modified field to show an actual time stamp when you look at the files present on the card using Windows Explorer. As Billy Ho says, the callback function is the way to do it. You can indeed use this function with SD.h if you don't want to convert to SDFat. Here is an example of the function in a sketch. Notice the timing of when the date modified time stamp is written, it is when file.close() writes the actual data to the card.
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <RTClib.h>
File file; // test file
const uint8_t SD_CS = 10; // SD chip select
RTC_DS1307 RTC; // define the Real Time Clock object
char timestamp[30];
//------------------------------------------------------------------------------
// call back for file timestamps
void dateTime(uint16_t* date, uint16_t* time) {
DateTime now = RTC.now();
sprintf(timestamp, "%02d:%02d:%02d %2d/%2d/%2d \n", now.hour(),now.minute(),now.second(),now.month(),now.day(),now.year()-2000);
Serial.println("yy");
Serial.println(timestamp);
// return date using FAT_DATE macro to format fields
*date = FAT_DATE(now.year(), now.month(), now.day());
// return time using FAT_TIME macro to format fields
*time = FAT_TIME(now.hour(), now.minute(), now.second());
}
//------------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
Wire.begin();
if (!RTC.begin()) {
Serial.println("RTC failed");
while(1);
};
// set date time callback function
SdFile::dateTimeCallback(dateTime);
DateTime now = RTC.now();
sprintf(timestamp, "%02d:%02d:%02d %2d/%2d/%2d \n", now.hour(),now.minute(),now.second(),now.month(),now.day(),now.year()-2000);
Serial.println("xx");
Serial.println(timestamp);
if (!SD.begin(SD_CS)) {
Serial.println("SD.begin failed");
while(1);
}
file = SD.open("TEST_SD.TXT", FILE_WRITE);
file.println("Testing 1,2,3...");
delay(5000);
file.close();
Serial.println("Done");
}
//------------------------------------------------------------------------------
void loop() {}