2011-10-23 3 views
0

J'ai besoin de calculer les millisecondes à partir de la mi-nuit, écrit le code, mais il semble y avoir aucun problème.calculer millisecondes à partir de la mi-nuit

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; 

Il semble qu'il y ait des différences de millisecondes. Quelqu'un peut le signaler?

+3

Quand vous dites différences, quel problème voyez-vous? – marnir

+0

parfois sa milliseconde est inférieure à celle attendue – CrazyC

Répondre

2

Vous devez calculer correctement, en tant que time_t, la dernière minuit précédente, c'est-à-dire la minuit à laquelle le jour actuel a commencé. Vous pouvez le faire quelque chose comme ceci:

// 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; 
} 

Le point important est que vous devez utiliser mktime() pour trouver minuit après avoir tm_hour, tm_min et tm_sec du temps courant à zéro.

Vous savez quoi faire après avoir trouvé le time_t de minuit.

+0

Je regarde millisecondes pas en secondes. – CrazyC

+0

@CrazzyC - Wow, c'est difficile! Vous savez certainement comment poser un défi. Je vais devoir y penser. Oh oui! Maintenant, je me souviens: millisecondes = secondes * 1000. Ouf! Ne posez plus ces questions qui vous penchent à l'esprit - toute cette pensée fait exploser ma tête :-) –

+0

Je regarde le temps en millisecondes avec précision. Si je convertis les secondes en millisecondes, alors je perds les millisecondes. Supposons, le moment où je suis en train de faire le temps est de 2: 30: 07: 499 (h: mm: ss: milliseconde), selon la solution proposée, je vais perdre 499 millisecondes. J'espère que vous avez le point :) – CrazyC

Questions connexes