2010-01-21 5 views
2

내 iPhone 앱에서 내 시간 라벨에 대한 화면 공간이 부족합니다. 내 해결책은 시간을 갖는 것입니다. 12:00 한 줄에 표시하고 사용자의 현재 로캘에서 AM-PM이 사용되도록 지정하는 경우 아래에 두 번째 레이블로 표시합니다.NSString에서 12 시간 시계 접미사 제거

AM-PM에도 현지화 된 변형이 있기 때문에 "AM"또는 "PM"문자를 찾을 수는 없지만 마지막 두 문자를 제거하는 것에 대해 생각했지만 일부 언어는 형식 이렇게 : "FM" "여자 이름". 나의 다음 생각은 처음 5 자리 (12:34) 다음에 모든 것을 떼어내는 것이었지만, 10 시간 이하의 시간 간격은 좋지 않았다.

사용자 설정에 관계없이 항상 현지화 된 접미사를 제거하고 새 문자열로 이동하는 "로케일 안전"방식이 있습니까?

미리 감사드립니다.

답변

0

나는 이런 식으로 해결하고 수동 15+ 로케일 설정으로 테스트 결국 접미어가없는 로케일과 나는 "AM/PM"레이블을 설정하지 않습니다. 그렇지 않으면 두 레이블을 모두 설정하고 timeLable을 [timeParts objectAtIndex:0], localeLabel을 [timeParts objectAtIndex:1]으로 설정합니다.

이것은 모든 로케일에 대해 안정적인 솔루션 인 것으로 보입니다.

1

로케일을 안전하게 수행 할 수있는 방법은 없습니다.

NSDateFormatter을 사용하면 두 개의 문자열을 생성 할 수 있습니다.

NSDateFormatter *timeOfDayFormatter = [[[NSDateFormatter alloc] init] retain]; 
[timeOfDayFormatter setDateFormat:@"hh:mm"]; 

NSDateFormatter *amPmFormatter = [[[NSDateFormatter alloc] init] retain]; 
[amPmFormatter setDateFormat:@"aa"]; 


NSLog(@"Time is: %@ %@", 
    [timeOfDayFormatter stringFromDate:theDate], 
    [amPmFormatter stringFromDate:theDate]); 

이제 두 개의 문자열로 사용자 인터페이스를 배치 할 수 있습니다.

24 시간 형식은 내가 사는 곳에서 표준입니다. 나는 스크린 부동산이 진짜 문제라면 그 포맷을 사용자에게 "강요"하겠다. count이 1이되는 경우

if ([timeParts count] > 1) {...} 

: 나는 timeParts 배열을 테스트 그리고

NSArray *timeParts = [NSArray arrayWithArray:[[timeFormatter stringFromDate:myDate] componentsSeparatedByString:@" "]]; 

:

+0

안녕 Niels 고맙습니다. :) 이미 NSDate 개체가 있고 사용자에게 24 시간 형식을 쉽게 적용 할 수 있지만 (세계를 더 단순하게 만들 수는 있지만) 설정을 존중하고 싶습니다. 24 시간 형식의 사용자를 처리 할 때 아무런 문제가 없습니다. 그러나 12 시간 형식 인 경우 플래그를 올리고 문자열에서 "AM"또는 "PM"접미사를 제거하고 별도의 UILabel로 이동해야합니다. 앱이 약속을 처리하므로 시간과 날짜가 중요하며 사용자가 시간에 대해 불확실하거나 의문을 느끼기를 바라지 않습니다. (12 시간 시계를 사용할 때처럼 :) – RickiG

+0

나도 마찬가지입니다. 24 시간 표기법 또는 완전한 오전/오후 표기법. 나는 당신이 사용자의 로케일을 존중할 수 있다고 생각하지 않는다. * 그리고 * 디스플레이 포맷을 엉망으로 만든다. 아마도 약속이 곧 나올 것이라고 사용자에게 알리는 다른 방법이 있습니다. "10 분 후", 빨간색 깃발, 시계 아이콘 또는 이와 유사한 항목이 있습니까? 태양 또는 달 아이콘? –

+0

안녕 Niels. 이것은 NSDate 질문보다 NSString 질문에 더 가깝습니다. 날짜에 NSDateFormatterShortStyle을 사용합니다. 그것을 NSString으로 변환하십시오. 이 문자열에 12 시간 시계 접미사가 포함되어 있으면이 접미사를 시간 레이블 아래의 레이블로 이동하십시오. 그것은 다른 것들에도 좋습니다. 예 : 오전 PM 접미사는 물론 넣는 레이블과 동일한 글꼴 크기를 갖습니다. 이를 제거하고 별도의 레이블에 표시함으로써 시간 레이블보다 작은 크기로 설정할 수도 있습니다. 다시 한번 감사드립니다. – RickiG

관련 문제