2016-06-06 3 views
2

프로젝트가 개발 중일 때 나는 최근 날짜를 확인하기 위해 두 날짜 사이의 차이점을 찾아야하며 괜찮 았지만 조금 버그를 발견했습니다.C의 차이 일수 1 일이 작동하지 않음

struct tm firstDate, secondDate; 
firstDate.tm_hour = 0; 
firstDate.tm_min = 0; 
firstDate.tm_sec = 0; 
firstDate.tm_mon = 5; 
firstDate.tm_mday = 30; 
firstDate.tm_year = 2016 - 1900; //difference between current year and 1900 

secondDate.tm_hour = 0; 
secondDate.tm_min = 0; 
secondDate.tm_sec = 0; 
secondDate.tm_mon = 6; 
secondDate.tm_mday = 1; 
secondDate.tm_year = 2016 - 1900; 

time_t fDate = mktime(&firstDate); // 31/5/2016 
time_t sDate = mktime(&secondDate); // 1/6/2016 
int diff = (difftime(fDate, sDate)); 

printf("%d", diff/86400); 

는 내가 좋아하는 월말의 날짜를 비교하려는 경우를 제외하고 모든 일에서 작동 (31/5/2016 :

날짜에 대한

구조체 TM를 사용하여 메신저,이 코드입니다) 다음날 (1/6/2016), 그것은 0 일 반환하고 1 반환해야합니다.하지만 그것을 20/5/2015 변경할 경우 2 대신 1 일 반환합니다. 31 일 수 있습니다. 30 .. 그래서 그것은 몇 달 동안 작동하고 다른 사람들은 그것이 작동하지 않습니다 .. 사람이 이것을 과거 방법을 알고 있습니까? 내 나쁜 영어에 대한 사전 및 유감의

덕분에, 내 모국어

답변

2

월로 설 것 secondDate.tm_mon의 값 0, 1이 아닌 아니다.

이 시도 :

struct tm firstDate, secondDate; 
firstDate.tm_hour = 0; 
firstDate.tm_min = 0; 
firstDate.tm_sec = 0; 
firstDate.tm_mon = 5 - 1; 
firstDate.tm_mday = 30; 
firstDate.tm_year = 2016 - 1900; //difference between current year and 1900 

secondDate.tm_hour = 0; 
secondDate.tm_min = 0; 
secondDate.tm_sec = 0; 
secondDate.tm_mon = 6 - 1; 
secondDate.tm_mday = 1; 
secondDate.tm_year = 2016 - 1900; 

time_t fDate = mktime(&firstDate); // 31/5/2016 
time_t sDate = mktime(&secondDate); // 1/6/2016 
int diff = (difftime(fDate, sDate)); 

printf("%d", diff/86400); 
+0

덕분에 남자 정말 감사. 내가 할 수있을 때 대답을 받아 들일거야. – jamez