2015-01-28 3 views
0

NSDateFormatter를 만들었지 만 가끔 특정 장치에서 같은 장치 (시뮬레이터)에없는 NSDate를 생성합니다.NSDateFormatter가 때로는 nil을 반환합니다.

NSString *lastModifiedString = [metaData objectForKey:@"Last-Modified"]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss Z"]; 
    NSDate *onlineModDate = [dateFormatter dateFromString:lastModifiedString]; 

문자열 에 대한 예를 들어 "2015년 1월 9일 (금)은 그리니치 표준시 15시 08분 1초"는 nil을 반환하지만 금 "에 대한 년 12 월 12 일 2014 년 9시 15분 :

내 코드입니다 : 52 그리니치 표준시 "그것은 바로 NSDate를 반환합니다.

dateformat에 괄호를 추가하려고했는데 로캘을 "en_US_POSIX"로 설정하려고 시도했지만 큰 숫자 대신 작은 z를 시도했지만 어느 것도 작동하지 않았습니다.

내가 뭘 잘못하고 있니? 당신의 도움을 주셔서 감사합니다.

+0

그냥 추측 : 그것은 12을 구문 분석 : 59 : 59 좋아,하지만 13:00:00에 실패합니다. 그 둘의 차이점은 무엇입니까? –

+0

이 링크를 북마크에 추가하십시오 : http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns –

+2

문제는 'hh'입니다. 왜냐하면 12 시간 형식으로 시간을 표시하기 때문입니다. 따라서 15는 유효하지 않습니다. 24 시간 형식으로 사용되는'HH '를 사용하십시오. –

답변

3

NSDateFormatter는 24 시간의 시간 동안 Unicode standard for date and time patterns. 사용 'H'를 다음과 코드에 따라서

, 올바른 방법은 다음과 같아야합니다

NSString *lastModifiedString = [metaData objectForKey:@"Last-Modified"]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"]; 
    NSDate *onlineModDate = [dateFormatter dateFromString:lastModifiedString]; 
관련 문제