我需要计算从午夜开始的毫秒数,写了代码但似乎有任何问题。
time_t t;
time_t rawtime;
char buff[256] ={0};
struct timeval tv;
struct timezone tz;
struct tm *tma;
gettimeofday(&tv, &tz);
tma=localtime(&tv.tv_sec);
static char* months[] = {"JAN", "FEB", "MAR", "APR", "MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"};
sprintf(buff,"%02d %s %d 00:00:00",tma->tm_mday, months[tma->tm_mon], tma->tm_year + 1900);
struct tm tm1;
strptime(buff, "%d %b %Y %H:%M:%S", &tm1);
tm1.tm_isdst = -1;
t = mktime(&tm1);
time ( &rawtime );
time_t milSecFromMidNight = (rawtime - t)*1000 + tv.tv_usec/1000;
似乎有些时间以毫秒为单位存在差异。谁能指出来?
最佳答案
您需要正确计算前一个午夜,即当天开始的午夜,作为 time_t。你可以这样做:
// function to calculate midnite last night
time_t // calc current day 00:00:00
today_at_0000 ( ) {
time_t curtime, midtime;
struct tm *localtm_p;
curtime = time( NULL );
localtm_p = localtime( &curtime );
localtm_p->tm_hour = 0;
localtm_p->tm_min = 0;
localtm_p->tm_sec = 0;
midtime = mktime( localtm_p ); // today at 00:00:00
return midtime;
}
重要的一点是,在将当前时间的 tm_hour、tm_min 和 tm_sec 设置为零后,您必须使用 mktime( ) 来查找午夜。
找到午夜 time_t 后,您就知道该怎么做了。
关于c++ - 从午夜开始计算毫秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865941/