For this program I need to "grab the start time of the entire process within the max. time precision avail including nanoseconds." in the format:
April 9, 2022 13:18:17.123456789
I am able to get everything but the nanoseconds. Is it possible and/or what do you recommend?
Here is what I have:
//%B - Full Month Name
//%e - day space padded (%d 0 padded)
//$G - year (with century)
//%R - 24-hour HH:MM time, equivalent to %H:%M
//%N - nanoseconds?
//%T - ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S
#define BUFFERSIZE 256
char timeStringEnd[BUFFERSIZE] = {0};
time_t timeEnd = time(NULL);
struct tm *timePointerEnd = localtime(&timeEnd);
strftime(timeStringEnd, BUFFERSIZE, "\n%B%e, %G %T", timePointerEnd);
puts(timeStringEnd);
%N doesn't want to work. Any supplemental material/sources on using timing is much appreciated . TIA
The
strftime()function doesn't support sub-second times. You'll need to add that yourself. You also need to use a function that returns sub-second times — that isn'ttime(). Assuming you have a POSIX-ish system, you can useclock_gettime():Note that if you want to print microseconds, you use
%.6ldandtm.tv_nsec / 1000; if you want to print milliseconds, you use%.3ldandtm.tv_nsec / 1000000. Care is required.C11 provides the
timespec_get()function that does roughly the same job. It uses astruct timespec, but the arguments are slightly different. You'd pass the pointer first and specifyTIME_UTCas the second argument.If you have neither of those functions available, the (old, obsolescent) POSIX function
gettimeofday()provides microsecond resolution timing. And an even older function,ftime(), also from POSIX (but removed from the standard nearly two decades ago) provides millisecond resolution timing. Both of these are often available on non-POSIX systems. Windows has other functions too.