Excellent! I appreciate your guidance. Here's the output:
sprintf datetime is: 18-17-04_17:81:09, Sun,
which should be:
sprintf datetime is: 12-11-04_11:51:09, Sun.
So, I think the sprintf codeblock is correctly recognizing input from the r[] array. The code is getting close; I think I need to bitshift or some similar operation. I notice that when a byte is reported incorrectly, it is off by six, typically. So that makes me wonder if I'm failing to convert to/from hex/dec.
Here's the codeblock based on everyone's input and the man page:
const char *SD_datetime_mask =
{
PSTR("sprintf datetime is: %02d-%2d-%.2d_%.2d:%.2d:%.2d, %s ")
};
sprintf_P(SD_datetime, SD_datetime_mask, r[6], r[5], r[4], r[2], r[1], r[0], Ddd[r[3]]);
Serial.print(SD_datetime);
Elsewhere, the functional code that goes straight to Serial.print uses:
Serial.print(v >> 4, HEX);
Serial.print(v & 0XF, HEX);
I think I need to apply those operations somehow to my data before displaying the sprintf'ed string. Am I on the right track?