2013-07-23 3 views
1

다음 코드를 실행할 때 strptime은 시간대 값을 무시하는 것 같습니다. 현지 시간대의 값을 설정합니다 (+10).C++ strptime이 구문 분석시 시간대를 무시합니다.

-----------2013-04-24T9:47:06+400 - %Y-%m-%dT%H:%M:%S%z 
TM Break H:9 is DST:0 GMT Off:0 
The epoch value: 1366760826 
DateTime in String:  04/24/13 - 09:47AM +1000 

-----------2013-04-24T11:47:06+800 - %Y-%m-%dT%H:%M:%S%z 
TM Break H:11 is DST:0 GMT Off:36000 
The epoch value: 1366768026 
DateTime in String:  04/24/13 - 11:47AM +1000 

-----------2013-04-24T9:47:06+0 - %Y-%m-%dT%H:%M:%S%z 
TM Break H:9 is DST:0 GMT Off:36000 
The epoch value: 1366760826 
DateTime in String:  04/24/13 - 09:47AM +1000 

-----------2013-04-24T9:47:06+4 - %Y-%m-%dT%H:%M:%S%z 
TM Break H:9 is DST:0 GMT Off:36000 
The epoch value: 1366760826 
DateTime in String:  04/24/13 - 09:47AM +1000 

이 코드입니다 :

은 (GCC 4.6.3로 컴파일 리눅스에서 실행) 출력이다

void date_Test(){ 
    string dateStrings[] = {"2013-04-24T9:47:06+400" 
          , "2013-04-24T11:47:06+800" 
          , "2013-04-24T9:47:06+0" 
          , "2013-04-24T9:47:06+4"}; 
    string formatStrings[] = {"%Y-%m-%dT%H:%M:%S%z" 
          , "%Y-%m-%dT%H:%M:%S%z" 
          , "%Y-%m-%dT%H:%M:%S%z" 
          , "%Y-%m-%dT%H:%M:%S%z"}; 

process_Timezone(dateStrings, formatStrings); 
} 

void process_Timezone(string dateStrings[], string formatStrings[]){ 
    int num = 4; 

    for (int i = 0; i < num; i++) { 
     cout << endl << "-----------" << dateStrings[i] << " - " << formatStrings[i] << endl; 
     tm *dtm = new tm; 
     strptime(dateStrings[i].c_str(), formatStrings[i].c_str(), dtm); 
     cout << "TM Break \tH:" << dtm->tm_hour << " is DST:" << dtm->tm_isdst << " GMT Off:" << dtm->tm_gmtoff << endl; 
     time_t ep_dt = mktime(dtm); 
     cout << "The epoch value: \t" << ep_dt << endl; 
     char buffer[40]; 
     strftime(buffer, 40,"%x - %I:%M%p %z", dtm); 
     cout << "DateTime in String: \t" << buffer << endl; 
     delete dtm; 
    } 
} 

답변

2

http://en.wikipedia.org/wiki/ISO_8601 당신의 1 ~ 3에 따르면, 숫자로 된 시간대 오프셋은 유효한 ISO 8601 값 (이 형식은 이상이 Linux에서 사용됨)이며 형식으로 hh[:][mm]이 필요합니다.

+0

나는 0400, 04:00과 같은 변형을 시도하지 않았다. 아무도 그것을 사용하지 않은 사람의 온라인 예제를 찾을 수 없었다. – pt123

+0

이걸로 행운이있다. 같은 문제가있다. 문자열에서 time_t를 만드는 방법 시간대 – N3Xg3N