2012-11-17 7 views
0

문자열에서 struct tm으로 이동하려면 strptime() 함수를 사용하고 있습니다. 그러나 필드를 확인할 때 채워지지 않은 몇 가지가 있습니다. 그래서 맨 페이지를 확인했지만 올바른 일을하고있는 것처럼 보입니다. 그래서 지금 어떤 일이 잘못되고 있는지를 놓치고 있습니다.strptime()의 문제

샘플 입력 문자열 :

Wed, 19 Oct 2005 10:59:00 GMT 

strptime 기능 : 그것은 % a는 요일을위한 나의 이해

if(strptime(date, "%a, %d %b %Y %T %Z", &time) != NULL) 

이다는 % d를, 해당 월의 일입니다 % b는 해당 월, % Y는 해당 연도, % T는 HH : MM : SS, % Z는 GMT를 나타냅니다. tm struct

year: 32767; month: 866041216; day: 0; 
hour: 3; minute: 0; second: 37941328 

코드 생성 출력의

출력 :

printf("year: %d; month: %d; day: %d;\n", 
     time.tm_year, time.tm_mon, time.tm_mday); 
printf("hour: %d; minute: %d; second: %d\n", 
     time.tm_hour, time.tm_min, time.tm_sec); 
printf("week day: %d; year day: %d\n", time.tm_wday, time.tm_yday); 

올바른 방향으로 밀어 넣기는 매우 도움이 될 것입니다. 감사합니다.

답변

0

당신은 일반적으로 다음과 같이 strptime를 호출하기 전에 time를 초기화해야합니다

memset(&time, 0, sizeof(struct tm)); 

man page 인용 : 원칙적으로

을,이 기능은 TM을 초기화하지 않습니다 만 지정된 값을 저장합니다. 즉, 호출 전에 tm을 초기화해야합니다. 서로 다른 UNIX 시스템 간에는 세부 사항이 약간 다릅니다. glibc 구현은 명시 적으로 이 아닌 필드를 건드리지 않습니다. 단, 년, 월 또는 일 요소 중 하나가 변경되면 tm_wday 및 tm_yday 필드를 다시 계산한다는 점만 다릅니다.