2011-10-23 19 views
0

중간 밤부터 밀리 초를 계산해야하는데 코드를 작성했지만 문제가있는 것 같습니다.중반부터 밀리 초를 계산합니다.

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; 

밀리 초 단위로 차이가있을 수 있습니다. 누구든지 그것을 지적 할 수 있습니까?

+3

차이점을 말할 때 어떤 문제가 보이나요? – marnir

+0

밀리 초가 예상보다 짧을 때 – CrazyC

답변

2

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을 설정 한 후 자정을 찾아에서는 mktime()를 사용해야하고, 제로 현재 시간의 tm_sec : 당신은 이런 식으로 뭔가를 할 수 있습니다.

자정의 time_t를 찾은 후에해야 할 일을 알고 있습니다.

+0

밀리 초를 초 단위로 볼 수 없습니다. – CrazyC

+0

@CrazyC - 와우, 힘든 일이야! 당신은 확실히 도전을 제기하는 방법을 알고 있습니다. 나는 그것에 대해 생각해야 할 것이다. 오 예! 이제 기억합니다 : 밀리 초 = 초 * 1000. 휴! 이 정신 굽힘 질문을 더 이상 묻지 말라 - 모든 생각이 내 머리를 폭발시킨다 :-) –

+0

나는 정확하게 밀리 세컨드 단위로 시간을보고있다. 밀리 초로 초를 변환하면 손실이 밀리 초가됩니다. 가정 할 때, 내가 시간을 슬리핑하는 순간은 제안 된 솔루션에 따라 499 밀리 초를 잃을 것이므로 2 : 30 : 07 : 499 (h : mm : ss : 밀리 초)라고 가정합니다. 희망을 당신은 요점을 가지고 :) – CrazyC

관련 문제