2013-08-15 3 views
2

문자열을 NSDate로 변환하려고하지만 Null이 표시됩니다.NSDateFormatter에서 Null 가져 오기

샘플 문자열 입력은 = 2013년 8월 8일 오후 12시 32분 22초

코드 : 내가 잘못

[self.dateFormat setDateFormat:@"MM/dd/yyyy hh:mm:ss a"]; 
NSLog(@"Date %@", [[communications objectAtIndex:x] objectForKey:@"dateUpdated"]); 
NSDate *date = [[NSDate alloc] init]; 
date = [self.dateFormat dateFromString:[[communications objectAtIndex:x] objectForKey:@"dateUpdated"]]; 
NSLog(@"Date from NSDate %@", [self.dateFormat stringFromDate:date]); 

을 뭐하는 거지?

샘플 NSLog 출력

2013-08-15 13:01:59.409 HD[478:907] Date 8/8/2013 12:32:22 PM 
2013-08-15 13:01:59.412 HD[478:907] Date from NSDate (null) 
2013-08-15 13:01:59.418 HD[478:907] Date 8/12/2013 9:45:18 AM 
2013-08-15 13:01:59.419 HD[478:907] Date from NSDate (null) 
2013-08-15 13:01:59.421 HD[478:907] Date 8/12/2013 9:45:20 AM 
2013-08-15 13:01:59.423 HD[478:907] Date from NSDate (null) 
2013-08-15 13:01:59.430 HD[478:907] Date 8/12/2013 4:10:49 PM 
2013-08-15 13:01:59.431 HD[478:907] Date from NSDate (null) 

참고 : 정말로 이상한 것은 내가 시뮬레이터에서 동일한 코드를 실행하는 경우는 벌금과 대부분의 장치 작동한다는 것입니다. 나는 모든 최신 상태로 장치의 소수에 그것을 실행하면 몇 가지 이유를 들어,이

+0

귀하의 dateFormatter가 초기화 되었습니까? 이 줄은 또한 할당 된 NSDate가 dateFromString 메서드에서 반환되기 때문에 메서드 NSDate * date = [[NSDate alloc] init]; '의 컨텍스트에서 불필요합니다 – Justin

+0

코드를 실행하면 작동합니다 ... @JustinAmberson은 날짜 포맷터가 초기화되었는지 확인하십시오. – sbarow

+0

내 DateFormatter가 초기화되었습니다. – Alan

답변

4

그것은 아마 로케일에 의존하지만,

[self.dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 

으로는 모든 장치에서 작동합니다.

+0

이 모든 것이 가능했습니다. X_X 너의 도움 없이는 이걸 가질 수 없었을거야. 고마워. 문제가 해결 된 이유에 대한 간략한 요약을 제공해 주시겠습니까? – Alan

+0

미래를위한 멋진 북마크 – Justin

1

이러한 변경 사항을 확인 ... null을 반환, 다시보고 :

또한
[self.dateFormat setDateFormat:@"MM/dd/yyyy hh:mm:ss a"]; 
NSLog(@"Date %@", [[communications objectAtIndex:x] objectForKey:@"dateUpdated"]); 
NSDate *date = [self.dateFormat dateFromString:[[communications objectAtIndex:x] objectForKey:@"dateUpdated"]]; 
NSLog(@"Date from NSDate %@", [self.dateFormat stringFromDate:date]); 

것이 확인

if (!self.dateFormat) { 
    self.dateFormat = [[NSDateFormatter alloc] init]; 
} 
+0

그래, 작동하지 않았다. 수정 내용을 읽으십시오. 어떤 이유로 Sim에서 작동하지만 일부 장치에서는 작동하지 않습니다. – Alan

0

먼저 코드가 단일 조각으로 작동하는지 확인하십시오. 예를 들어, -dateFromString : 메서드에서 사용하려고하는 NSString이 원하는 형식인지 확인하십시오. 또한 코드가 작동하는지 확인하려면 NSDate에서 NSString으로 작업을 되돌려 놓아야합니다.

다음 코드를 시도했으며 올바르게 작동합니다. 그래서 틀림없이, 여러분의 오류는 다른 곳에서 있지만 날짜 형식 자체에서는 아닙니다. NSDateFormatter가 제대로 초기화되었는지 확인하십시오.

NSString *dateString = @"8/8/2013 12:32:22 PM"; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"]; 

NSDate *date = [dateFormatter dateFromString:dateString]; 

NSLog(@"date = %@", date); 
관련 문제