自定义日期和时间,包括纳秒
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);
注意,如果要打印微秒,则使用%.6ld
和tm.tv_nsec / 1000
;如果你想打印毫秒数,你可以使用 %.3ld
和 tm.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还有其他功能。
对于这个程序,我需要“在包括纳秒在内的最大时间精度范围内获取整个过程的开始时间”。格式:
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);
注意,如果要打印微秒,则使用%.6ld
和tm.tv_nsec / 1000
;如果你想打印毫秒数,你可以使用 %.3ld
和 tm.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还有其他功能。