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
%.6ld
andtm.tv_nsec / 1000
; if you want to print milliseconds, you use%.3ld
andtm.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_UTC
as 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.