2013-06-29 2 views
1

그래서 웹 서비스에서 일부 데이터가 반환되고 그에 따라 UIDatePicker이 조정되는 응용 프로그램이 있습니다. 날짜는 다음과 같은 형식으로 반환됩니다12 시간 내 24 시간 설정 UIDatePicker

12-05-2013 16:05 (dd-mm-yyyy hh:mm) 

시간은 그러나 UIDatePicker 12 한시간 장치의 설정에 따라 24시간 중 하나이며, 24 시간 형식으로 저장됩니다. 데이터는 JSON 배열로 제공되며 핵심 potdd입니다. 내가 설정하는 날짜 선택 도구는 potddatepicker입니다.

NSDateFormatter *inputFormat = [[NSDateFormatter alloc] init]; 
[inputFormat setDateFormat:@"dd-MM-yyy hh:mm"]; 
NSDate *inputDate = [inputFormat dateFromString: [jsonObjects objectForKey:@"potdd"]]; 

NSDate *potdd = inputDate; 
[_potddatepicker setDate:potdd]; 

날짜가 12시 이전에 설정된 경우 제대로 작동합니다.

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date' 

나는 특히 단지 날짜 선택기를 위해 12 시간 형식으로 시간을 강제로 다시 강제하고 싶지 않아요 : (12) 다음은 다음과 같은 예외와 충돌 후 경우 날짜가 24 시간 시간에 가게입니다 일부 지역에서는 24 시간 날짜 선택 도구에서 사용할 수 있기 때문에 24 시간으로 표시됩니다. 아무도 내가이 문제를 어떻게 처리 할 수 ​​있는지 아니? 시간이 데이터베이스에 저장된 형식을 변경할 수 없습니다.

감사합니다.

+0

'inputDate'를 검사하여 예상 한 값이 있는지 확인 했습니까? –

+0

@GradyPlayer 그 복제본에 대한 대답은 문제가 잘못되었습니다. 그 답 아래의 주석을보십시오. 그래서이 질문에 대한 대답에서 특별한'en_US_POSIX' 로케일을 사용할 필요성을 지적했습니다. – rmaddy

+0

@rmaddy op의 포맷터는 약간 결함이 있지만 h vs H의 주요 포인트는 동일합니다. –

답변

7

귀하의 오류는 날짜 선택 도구와 아무런 관련이 없습니다.

문자열을 구문 분석하는 데 잘못된 날짜 형식을 사용하고 있습니다. 당신이 필요합니다 당신이 고정 된 포맷으로 작업하기 때문에

[inputFormat setDateFormat:@"dd-MM-yyyy HH:mm"]; // HH is 24-hour, hh is 12-hour 

또한, 당신은 en_US_POSIX에 날짜 포맷터의 로케일을 설정해야합니다.

3

입력 형식으로 hh 대신 HH을 입력하고 싶습니다. HH은 24 시간, hh은 12 시간입니다. 나는 또한 mm 대신에 MM을 원한다고 생각합니다. (MM는 두 자리 개월 지정자입니다 mm는 두 자리 지정 당신은 두 분을 설정하지 않으 분.!)

그래서 값 12-05-2013 16:05dd-mm-yyyy hh:mm의 형식에 대해 유효하지 않습니다 -하지만이 유효입니다 dd-MM-yyyy HH:mm입니다.

자세한 내용은 Unicode Date Format Patterns 설명서를 참조하십시오. 기본적으로 패턴이 입력 데이터와 일치하는지주의해야합니다. 피커의 UI 설정이 JSON 데이터 입력 형식과 독립적이지만, iOS 개발에서 확실히 말할 수는 없습니다.

+1

날짜 선택기는 NSDate를 반환합니다. NSDate는 기본적으로 Obj-C 래퍼로서 참조 날짜부터 초 단위의 'double'을 가지며 형식화 된 표현과는 아무런 관련이 없습니다. 그렇기 때문에 그들은 완전히 별개입니다. –

+0

@GradyPlayer : 그게 내가 원하는거야 :) –

관련 문제