2016-07-19 157 views
-1

对于错误日志,我想创建包含日期和时间的时间戳,包括微秒。它应该有形式2016年7月19日13:59:31:123.456获取包含微秒的日期和时间的时间戳

我发现了很多的time_t例子,但分辨率只有数秒

+1

芯片标签可能放错了位置。这个问题与微芯片PIC微控制器无关。 –

+0

您正在寻找_high resolution timer_。推荐看看:http://stackoverflow.com/questions/6749621/how-to-create-a-high-resolution-timer-in-linux-to-measure-program-performance –

回答

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月以来的月数,范围为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; 
} 
+0

“tm的成员结构是:“描述_minimum_集合的成员。 C规范使用“tm结构至少应包含以下成员......”gettimeofday()不是标准的库函数。 C确实有'timespec_get()',但我不确定它的普及程度。 – chux

+0

感谢您的回复。 – nobody

+0

@nobody很高兴我能帮上忙。如果您觉得它有用,请随时[接受此答案](http://stackoverflow.com/help/accepted-answer)。 – dbush