2017-09-23 9 views
0

지정한 포맷터로 날짜 객체를 만들려고하지만 date formatter_datefromstring 메소드가 nil을 반환합니다. 명확한 문서 샘플로 알려주십시오. 구문 분석하려고하는 문자열은 "2017 년 9 월 24 일 오전 2시 PDT"입니다. 미리 감사드립니다.NSDateFormatter는 datefromstring 메서드를 호출하는 동안 nil을 반환합니까?

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setTimeZone:[NSTimeZone systemTimeZone]]; 
    [dateFormat setLocale:[NSLocale currentLocale]]; 
    [dateFormat setDateFormat:@"h:mm a Z 'on' MMMM d, yyyy"]; 
    NSLog(@"dateStr:==============> %@", dateStr); 
    NSDate *date = [dateFormat dateFromString:dateStr]; 
    NSLog(@"Date:------------->%@", date); 
    return date; 
+1

'dateStr' 무엇입니까 유용한 경우? – vadian

+0

NSDate로 변환하려는 날짜 문자열을 제공하십시오. –

+0

장치/시뮬레이터가 영어로 설정되어 있습니까? – rmaddy

답변

1

틀린 시간대 지정자를 사용하고 있습니다. Z-0800과 같은 시간대 용입니다. PDT과 같은 짧은 시간대 약어의 경우 z이 필요합니다.

또한 포맷터의 로컬을 currentLocale으로 설정하고 시간대를 systemTimeZone으로 설정하는 이유는 기본값이므로 설정하지 않아도됩니다. 그리고 파싱하는 문자열에 시간대 정보가 포함되어있는 경우 포맷터의 시간대와 관련이 없습니다. 영어에 고정 된 형식의 날짜 문자열을 구문 분석하고 있기 때문에

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"h:mm a z 'on' MMMM d, yyyy"]; 
NSLog(@"dateStr:==============> %@", dateStr); 
NSDate *date = [dateFormat dateFromString:dateStr]; 
NSLog(@"Date:------------->%@", date); 
return date; 

그러나, 당신은 정말 en_US_POSIX의 특별한 로케일로 포맷터의 로케일을 설정해야합니다. 이렇게하면 사용자의 로켈에 상관없이 영어 월 이름을 처리 할 수 ​​있습니다.

[dateFormat setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 
+0

고마워 .... 나를 위해 일했다. – Saiteja

+0

도와 줘서 기쁘다. 문제를 해결하는 답을 수락하는 것을 잊지 마십시오. 이렇게하면 사람들이 귀하의 질문이 해결되었음을 알 수 있습니다. – rmaddy

0

날짜를 확인할 수 있습니까? 날짜 형식과 주어진 형식이 같거나 다를 수 있습니다. 둘 다 같은 형식이 아니면 객체가 없습니다. 아래 예제에서 dateStr 형식을 시도하십시오. 54 : 04.654597 + 0,530 날짜 [4068 : 79926] dateStr :

콘솔에서
NSString *dateStr = @"10:23 am Z on September 30, 2017"; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setTimeZone:[NSTimeZone systemTimeZone]]; 
[dateFormat setLocale:[NSLocale currentLocale]]; 
[dateFormat setDateFormat:@"h:mm a Z 'on' MMMM d, yyyy"]; 
NSLog(@"dateStr:==============> %@", dateStr); 
NSDate *date = [dateFormat dateFromString:dateStr]; 
NSLog(@"Date:------------->%@", date); 

당신은 2017년 9월 23일 09을 얻을 것이다 ==============> 10 : 오전 23 시부 터 2017 년 9 월 30 일 2017-09-23 09 : 54 : 04.657359 + 0530 날짜 [4068 : 79926] 날짜 : -------------> Sat Sep 30 15:53 ​​: 00 2017

+0

질문을 검토하십시오. 여기에는 파싱되는 문자열의 구체적인 예가 포함됩니다. 귀하의 대답은 다른 시간대를 사용하고 있습니다. – rmaddy

0

아래 로캘을 사용하면 nil 값을 반환하지 않습니다.

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

투표 내 코드는

+0

이것은 문제가되지 않습니다. – rmaddy

+0

위와 같은 문제가있었습니다. 로케일을 추가하여 문제를 해결했습니다. 내 문제는 장치 날짜 형식을 12 시간에서 24 시간으로 변경했을 때 응용 프로그램이 다운되는 경우입니다. –