对于错误日志,我想创建包含日期和时间的时间戳,包括微秒。它应该有形式2016年7月19日13:59:31:123.456获取包含微秒的日期和时间的时间戳
我发现了很多的time_t
例子,但分辨率只有数秒
对于错误日志,我想创建包含日期和时间的时间戳,包括微秒。它应该有形式2016年7月19日13:59:31:123.456获取包含微秒的日期和时间的时间戳
我发现了很多的time_t
例子,但分辨率只有数秒
您可以使用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月以来的月数,范围为0〜11
tm_year 自1900年以来
tm_wday 自上周日以来的天数的年数,范围为0至6
tm_yday 天数自1月1日范围0至365.
tm_isdst 一个标志,指示夏时制在所述时间是否生效 。如果夏令时的生效时间为 ,则该值为正,如果不是,则为零;如果信息不可用,则为负值。
编辑:
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;
}
芯片标签可能放错了位置。这个问题与微芯片PIC微控制器无关。 –
您正在寻找_high resolution timer_。推荐看看:http://stackoverflow.com/questions/6749621/how-to-create-a-high-resolution-timer-in-linux-to-measure-program-performance –