This is a simple mistake .
dateTimeMilDS3231() is returning a String and asprintf in formatting string "%s" expect a C-style string .
String can be "converted" to C-style string with calling .c_str()
on it . :
Correct code is :
char *buf;
asprintf(&buf, "%lu\t%s\n", now(), dateTimeMilDS3231().c_str() );