自定义日期和时间,包括纳秒

Custom date and time including nanoseconds

对于这个程序,我需要“在包括纳秒在内的最大时间精度范围内获取整个过程的开始时间”。格式:

April 9, 2022 13:18:17.123456789

除了纳秒,我什么都能得到。可以吗and/or有什么推荐的吗?

这是我的资料:

//%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 不想工作。非常感谢任何关于使用计时的补充 material/sources。 TIA

strftime()函数不支持sub-second次。您需要自己添加。您还需要使用 returns sub-second 次的函数,而不是 time() 次。假设你有一个 POSIX-ish 系统,你可以使用 clock_gettime():

struct timespec tv;
clock_gettime(CLOCK_REALTIME, &tv);
struct tm *timePointerEnd = localtime(&tv.tv_sec);
size_t nbytes = strftime(timeStringEnd, BUFFERSIZE, "\n%B%e, %G %T", timePointerEnd);
snprintf(timeStringEnd + nbytes, sizeof(timeStringEnd) - nbytes,
         "%.9ld", tv.tv_nsec);
puts(timeStringEnd);

注意,如果要打印微秒,则使用%.6ldtm.tv_nsec / 1000;如果你想打印毫秒数,你可以使用 %.3ldtm.tv_nsec / 1000000。需要小心。

C11 提供了 timespec_get() 功能,其功能大致相同。它使用 struct timespec,但参数略有不同。您将首先传递指针并将 TIME_UTC 指定为第二个参数。

如果您没有这些功能可用,(旧的,过时的)POSIX 功能 gettimeofday() provides microsecond resolution timing. And an even older function, ftime(),也来自 POSIX(但将近二十年前从标准中删除)提供毫秒分辨率计时。 non-POSIX 系统上通常都提供这两种方法。 Windows还有其他功能。