2016-12-16 3 views
1

나는 다음과 같은 구조 준비 : 예기치 않은 값()

struct tm tDepartureTime; 
tDepartureTime.tm_min = 24; 
tDepartureTime.tm_hour = 13; 
tDepartureTime.tm_mday = 11; 
tDepartureTime.tm_mon = 2 - 1; 
tDepartureTime.tm_year = 2017 - 1900; 

다음 내가한다 mktime를 사용()을 (초)을 얻을 수 있습니다.

unsigned long qTime = mktime(&tDepartureTime); 

그러나 그것은 나에게 2024년 9월 11일에 대한 타임 스탬프와 동일 수 1731157832를 반환합니다. 어디에서 문제가 될 수 있습니까?

+0

2017 년 2 월로 예정된 날짜를 고민하셨습니까? ('tm_mon '의 값은 1 월 0에서 12 월 11까지입니다.) –

+0

@JonathanLeffler, 네 조나단, 2 월을위한 것입니다. 어쨌든 저에게 알려 주셔서 감사합니다. –

+0

확인. '2017 - 1900 '을 썼지 만'2 - 1'을 쓰지 않았기 때문에 확실하지는 않지만 질문에 실질적으로 영향을주지는 않았습니다 –

답변

3

tm 구조의 일부 필드는 초기화되지 않습니다. 구체적으로는, tm_sec, tm_mday, tm_wday, tm_ydaytm_isdst입니다.

이 중에서 최소한 수동으로 설정해야합니다 (tm_sec). 그 가치가 무작위로 높아지게된다면 미래에 대한 시간을 알 수 있습니다.

첫 번째 줄을 struct tm tDepartureTime = {0}으로 변경하여 전체 구조체를 0으로 초기화 할 수도 있습니다. 이것은 아마도 최상의 솔루션입니다.

+0

'tm_wday','tm_yday'의 값은 중요하지 않습니다. 'mktime()'호출의 부작용으로 설정합니다. 이 값은'tm_mday'에 설정되었습니다. 당신이 정확하게 말했듯이,'tm_sec'의 값은 설정되지 않았고 실제로 존재하는 값은 아마도 꽤 컸을 것입니다. –

관련 문제