How to convert st_mtime (which get from stat function) to string or char

testCoder picture testCoder · Nov 24, 2012 · Viewed 36k times · Source

I need to convert st_mtime to string format for passing it to java layer, i try to use this example http://www.cplusplus.com/forum/unices/10342/ but compiler produce errors

invalid conversion from 'long unsigned int*' to 'const time_t* {aka long int const*}'

initializing argument 1 of 'tm* localtime(const time_t*)' [-fpermissive]

What i doing wrong, how to get time creation of file using stat function in string presentation.

Help please.

Answer

Basile Starynkevitch picture Basile Starynkevitch · Nov 24, 2012

According to the stat(2) man page, the st_mtime field is a time_t (i.e. after reading the time(7) man page, a number of seconds since the unix Epoch).

You need localtime(3) to convert that time_t to a struct tm in local time, then, strftime(3) to convert it to a char* string.

So you could code something like:

time_t t = mystat.st_mtime;
struct tm lt;
localtime_r(&t, &lt);
char timbuf[80];
strftime(timbuf, sizeof(timbuf), "%c", &lt);

then use timbuf perhaps by strdup-ing it.

NB. I am using localtime_r because it is more thread friendly.