2012-09-16 3 views
1

strptime_l은 항상 null을 반환합니다. 나는 Objective-C에서 이것을하고있다.strptime_l이 null을 반환합니다.

#import <time.h> 
#import <xlocale.h> 

/* Later on... */  

    const char *str = [dateStr UTF8String]; 
    const char *fmt = [@"EE LLLL d HH:mm:ss Z yyyy" UTF8String]; 
    struct tm timeinfo; 
    memset(&timeinfo, 0, sizeof(timeinfo)); 
    char *ret = strptime_l(str, fmt, &timeinfo, NULL); 

    NSDate *date = nil; 

    if (ret) { 
     time_t time = mktime(&timeinfo); 

     date = [NSDate dateWithTimeIntervalSince1970:time]; 
    } 

ret은 항상 null입니다. dateStr의 값의 예는 Sat Sep 15 05:52:10 +0000 2012이며 항상 그 형식입니다.

아이디어가 있으십니까?

답변

3

strptime 대신 NSDateFormatter 형식을 사용하는 것 같습니다. 특정 날짜 및 시간 형식에 대한 자세한 내용은 here을 참조하십시오.

다음 코드는 작동합니다 :

NSString *dateStr = @"Sat Sep 15 05:52:10 +0000 2012"; 

const char *str = [dateStr UTF8String]; 
const char *fmt = [@"%a %b %d %H:%M:%S %z %Y" UTF8String]; 
struct tm timeinfo; 
memset(&timeinfo, 0, sizeof(timeinfo)); 
char *ret = strptime_l(str, fmt, &timeinfo, NULL); 

NSDate *date = nil; 

if (ret) { 
    time_t time = mktime(&timeinfo); 

    date = [NSDate dateWithTimeIntervalSince1970:time]; 
} 

을 동일한 달성 할 수있는 방법으로 간단하게 수행하여 :

NSString *dateStr = @"Sat Sep 15 05:52:10 +0000 2012"; 

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"EE LLLL d HH:mm:ss Z yyyy"]; 
NSDate *date = [dateFormat dateFromString:dateStr]; 
, 내가 전에하지만`strptime_l``NSDateFormatter`을 사용했다
+0

아 감사합니다 내 상황에 더 빠르고 적합 해 보입니다. 나는 다른 포맷팅을 잊어 버렸다. –