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



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

April 9, 2022 13:18:17.123456789

除了纳秒,我什么都能得到。有可能吗?你有什么建议?

这是我所拥有的:

//%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不想工作。非常感谢任何关于使用定时的补充材料/来源。TIA-

strftime()函数不支持次秒时间。你需要自己添加。您还需要使用一个返回次秒的函数——这不是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提供了执行大致相同工作的CCD_ 9功能。它使用struct timespec,但参数略有不同。首先传递指针,然后指定TIME_UTC作为第二个参数。

如果这两个函数都不可用,则(旧的、过时的(POSIX函数gettimeofday()提供微秒分辨率的计时。还有一个更古老的函数ftime(),也来自POSIX(但在近20年前从标准中删除(,它提供了毫秒分辨率的计时。这两种功能通常都可以在非POSIX系统上使用。Windows还有其他功能。

最新更新