从午夜开始计算毫秒数

calculate milliseconds from the mid night

本文关键字:计算 午夜 开始      更新时间:2023-10-16

我需要计算从午夜开始的毫秒数,编写代码,但似乎有任何问题。

 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之后该怎么做