对于错误日志,我想创建一个包含日期和时间的时间戳,包括微秒。它的格式应为2016.07.19 13:59:31:123.456
我找到了很多time_t
的例子,但分辨率只有几秒......
答案 0 :(得分:1)
您可以使用gettimeofday
:
#include <time.h>
#include <sys/time.h>
....
struct timeval tv;
gettimeofday(&tv, NULL);
struct timeval
定义为:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
然后,您可以使用gmtime
拆分秒部分:
struct tm *ts = gmtime(&tv.tv_sec);
struct tm
定义为:
struct tm { int tm_sec; /* seconds */ int tm_min; /* minutes */ int tm_hour; /* hours */ int tm_mday; /* day of the month */ int tm_mon; /* month */ int tm_year; /* year */ int tm_wday; /* day of the week */ int tm_yday; /* day in the year */ int tm_isdst; /* daylight saving time */ };
tm结构的成员是:
tm_sec分钟后的秒数,通常在0范围内 至59,但可以达到60,以允许闰秒。
tm_min小时后的分钟数,范围为0到59.
tm_hour 午夜过后的小时数,范围为0到23。
tm_mday 每月的日期,范围为1到31。
tm_mon自1月以来的月数,范围为0到11。
tm_year 自1900年以来的年数。
tm_wday 自星期日以来的天数,范围为0到6。
tm_yday 自1月1日以来的天数,范围为0到365.
tm_isdst的 一个标志,指示夏令时是否有效 在描述的时间。如果夏令时,该值为正 时间有效,如果不是,则为零,如果信息为 mation不可用。
编辑:
Windows没有gettimeofday
。这是您可以使用的实现:
int gettimeofday(struct timeval *tv, struct timezone *tz)
{
const unsigned __int64 epoch_diff = 11644473600000000;
unsigned __int64 tmp;
FILETIME t;
if (tv) {
GetSystemTimeAsFileTime(&t);
tmp = 0;
tmp |= t.dwHighDateTime;
tmp <<= 32;
tmp |= t.dwLowDateTime;
tmp /= 10;
tmp -= epoch_diff;
tv->tv_sec = (long)(tmp / 1000000);
tv->tv_usec = (long)(tmp % 1000000);
}
return 0;
}