2009-08-28 5 views
12

NSDateFormatter를 사용하여 iPhone 응용 프로그램에서 날짜를 설정하고 있으며 날짜가 올바르게 표시됩니다. 그러나, 모든 로케일 (내 애플 리케이션 최대 12 다른 언어를 지원하는) 찾기 setDateFormat 통해 지정한 날짜 형식을 고수하고있다. 이상적으로는, 내 형식을 따르는 대신 사용자의 지역 설정에 자연스럽게 나타나는 날짜 형식을 원합니다 (영어는 잘 작동하지만 다른 로케일은 자연스럽지 않을 수도 있음). 그래서 같이NSDateFormatter가 로캘 별 날짜를 표시하는 방법은 무엇입니까?

+ (NSString *)localizedStringFromDate:(NSDate *)date 
       dateStyle:(NSDateFormatterStyle)dateStyle 
       timeStyle:(NSDateFormatterStyle)timeStyle; 

:

self.creationDate.text = [NSDateFormatter localizedStringFromDate:creationTimeStamp 
              dateStyle:NSDateFormatterMediumStyle 
              timeStyle:NSDateFormatterShortStyle]; 

당신에게 출력을 '제공한다

 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateFormat:@"MMMM dd, yyyy kk:mm:ss"]; 

    self.creationDate.text = [dateFormatter stringFromDate:creationTimeStamp]; 

답변

11

해결책을 찾았습니다. 열쇠는 setDateFormat을 전혀 호출하지 않는 것이며 iPhone의 API는 setDateStylesetTimeStyle에 지정된 내용을 기반으로 표시 할 적절한 항목을 자동으로 선택합니다. @의 fbrereto의 디자인

+0

-localizedStringFromDate에 의해 반환 된 문자열이 시간대 인수에 맞춰지기 때문에이 솔루션은 -localizedStringFromDate API를 사용하는 것보다 낫습니다. 일부 지역의 경우 날짜/시간이 관련되지 않을 수도 있습니다. 표준 시간대 구성 요소를 제거하려면이 작업을 추가로 수행해야합니다. [dateFormatter setTimeZone : [NSTimeZone timeZoneForSecondsFromGMT : 0]]; –

31

내가 대신 다음 NSDateFormatter API를 시도 할 것입니다 :

다음

내 코드입니다 다시 찾고 코드를 정리하고 약간의 가짜 메모리를 관리하지 않아도됩니다.

+0

그러나 나는 주어진 스타일로 스타일을하지 않으려면. 대신에 다음과 같은 날짜를 표시하려고합니다. MMM YYYY (아랍어 및 영어). 좀 도와 줄 수있어? –

0

자가 포함 된 솔루션 :

static NSString *FormatDate(NSDate *date) 
{ 
    return [NSDateFormatter localizedStringFromDate:date 
             dateStyle:NSDateFormatterMediumStyle 
             timeStyle:NSDateFormatterNoStyle]; 
} 

지금 당신은 단순히 실행할 수 있습니다

NSString *formattedDate = FormatDate([NSDate new]); 
+0

NSDateFormatter는 매우 비쌉니다 (Bekkis 게시판 참조 : http://www.tinymission.com/post/nsdateformatter_is_expensive). 몇 번만 호출하면이 자체 포함 된 솔루션을 사용해야합니다. 아마도 사용 된 NSDateFormatter는 정적 변수에 지연 할당되어야합니다. – LaborEtArs

+0

좋은 점은 위에서 _dateFormatter를 static-c 함수로 전달하고 소비자로부터 참조를 유지할 수도 있습니다. – Zorayr

관련 문제