2014-06-24 7 views
1

처음에는 스택 오버플로에서 유사한 게시물을 모두 읽었 음을 강조하고 싶습니다. 그리고 아무것도 도움이되지 못했습니다.Difftime은 항상 0을 반환합니다

#include <stdio.h> 
#include <stdlib.h> 
#define _USE_32BIT_TIME_T 1 
#include <time.h> 

int main(void) 
{ 
    struct tm beg; 
    struct tm aft; 
    beg.tm_hour=0; beg.tm_min=0; beg.tm_sec=0; 
    aft.tm_hour=11; aft.tm_min=19; aft.tm_sec=19; 
    long long c; 
    c=difftime(mktime(&aft),mktime(&beg)); 
    printf("%lld",c); 
    return 0; 
} 

그것은 모든 timr 0에서 다른 아무것도 인쇄하지,하지만 난 (지금 &) 지금 시간이 시간에서는 mktime (후미 &)를 변경하려고 할 때 나는 제로가 아닌 결과를 얻었다. 이 코드에서 무엇을 수정해야합니까?

+3

다음을 시도하십시오. struct tm beg = {0}; struct tm aft = {0};'. 아마도'mktime'은 다른 필드의 초기화되지 않은 쓰레기 값 때문에 실패합니다. –

+0

당신은'time_t t1 = mktime (&aft); if (t1 == -1) {printf ("mktime failed! \ n"); exit (EXIT_FAILURE);}'등을 수행하여이를 확인할 수 있습니다. –

+0

정확하게. 'beg'와'aft'의 다른 필드는 값을 할당하지 않았기 때문에 쓰레기입니다 –

답변

0

mktime에 전달 된 인수가 1970 년 1 월 1 일 자정 전의 날짜를 참조하거나 달력 시간을 나타낼 수없는 경우이 함수는 -1 cast를 time_t 유형으로 반환합니다. (http://msdn.microsoft.com/en-us/library/aa246472(v=vs.60).aspx)

구걸과 후미의 tm_year 변수가 잘못되어 mktime이 실패 할 수 있습니다.

이 변수를 1970 년 이후의 1 년을 나타내는 값으로 설정하면 원하는 결과가 나타납니다.

#include <stdio.h> 
#include <stdlib.h> 
#define _USE_32BIT_TIME_T 1 
#include <time.h> 

int main(void) 
{ 
    struct tm beg = {0}; 
    struct tm aft = {0}; 

    beg.tm_hour=0; beg.tm_min=0; beg.tm_sec=0; 
    beg.tm_year = 71; //Set to 1971 

    aft.tm_hour=11; aft.tm_min=19; aft.tm_sec=19; 
    aft.tm_year = 71; //Set to 1971 

    long long c; 
    c=difftime(mktime(&aft),mktime(&beg)); 
    printf("%lld",c); 
     return 0; 
} 
관련 문제