2010-08-15 2 views
6

DateFormat.get*Instance()에 의해 반환 된 객체를 SimpleDateFormat으로 캐스팅하지 않고도 지정된 로케일의 기본 패턴을 검색 할 수 있습니까?주어진 로케일의 기본 패턴을 검색하는 또 다른 방법이 있습니까?

는 그 대부분의 경우 모든 것이 확인 될 것입니다, 이해하지만 메모는 javadochere있다 : "당신이 (또는 사용자에게 더 많은 제어를 제공 할) 형식 또는 구문 분석, 한층 더 제어하려면, DateFormat을 공장 방법에서 SimpleDateFormat으로 전송하면 대부분의 국가에서 사용할 수 있습니다. 인 경우에만 try 블록에 넣어야합니다.

그래서 "이 (가) 발생하는 특별한 경우"에 대해 어떻게해야합니까?

Related theme.

코드 샘플 :

/** 
* Returns '\n'-separated string with available patterns. 
* Optional adds appropriate language code to each pattern string. 
* 
* @param showLanguage Defines if language info is required. 
* @return String with available patterns, optional (if showLanguage is set 
* to "true") adds appropriate language code to each pattern. 
*/ 
public String getPatternsForAvailableLocales(Boolean... showLanguage) { 

    /* Array of available locales */ 
    Locale[] locales = DateFormat.getAvailableLocales(); 

    String result = ""; 

    for (Locale locale : locales) { 

     /* Add language info, if necessary */ 
     if ((showLanguage.length > 0) && (showLanguage[0])) { 
      result += locale.getLanguage() + '\t'; 
     } 

     /* Retrieving pattern */ 
     try { 
      result += ((SimpleDateFormat) 
        DateFormat.getDateTimeInstance(DateFormat.SHORT, 
          DateFormat.SHORT, locale)).toPattern(); 
     } catch (ClassCastException e) { 
      // ******************************** // 
      // What's up? Is there another way? // 
      // ******************************** // 
     } 

     result += '\n'; 

    } 
    return result; 
} 
+0

패턴 기반이 아니기 때문에 "이상한 것이 발생했습니다"라고 말하면 무엇이든 할 수 있는지 확실하지 않습니다. 특히 개발자가 java.text.spi.DateFormatProvider를 통해 자신의'DateFormat'을 제공 할 수 있기 때문에 특히 그렇습니다. –

답변

1

다음과 같은 자바 코드를 실행하여 특정 언어의 날짜 형식 기호를 검색 할 수 있습니다 :이 특정 경우

System.out.println(DateFormatSymbols.getInstance 
     (new Locale("en_US")).getLocalPatternChars()); 
System.out.println(DateFormatSymbols.getInstance 
     (new Locale("nl_NL")).getLocalPatternChars()); 

을, 네덜란드어, 날짜 형식 기호는 동일합니다.

GyMdkHmsSEDFwWahKzZ 
GyMdkHmsSEDFwWahKzZ 

외국어 기호가 다른 경우 간단한 형식 문자열에서 영어 문자로 외국어 문자를 사용하십시오.

DateFormatSymbols 클래스는 Java 1.4.2 이상부터 존재합니다.

2

패턴 자체가 당신이 그것을 캐스팅하는 이유이다 SimpleDateFormat에 고유합니다.

예외를 기록하려는 SimpleDateFormat이 아닌 DateFormat을 발견하면 실제 구현 클래스를 기록하므로이 상황을 처리하는 방법을 결정할 수있는 충분한 정보를 얻을 수 있습니다.

현재 SimpleDateFormat이 아닌 경우 패턴이 없으므로 결과 목록에이 패턴을 추가하지 마십시오.

내가 물을 수 있다면 왜 문자열 컬렉션 대신 연결 문자열을 반환합니까? 결과를 반복하는 것이 더 쉬울 것 같습니다.

연결 문자열이 필수 인 경우 StringBuilder를 사용하면 더 적은 개체를 만들고 성능을 향상시킬 수 있으므로 StringBuilder를 사용하여 빌드하십시오. 문자열을 반복하여 만들 때 좋은 습관이 있습니다.

+0

답장을위한 Thx. 구체적 질문에 대한 직접적인 답을 제공하지는 않았지만 가능한 상황을 처리하기위한 조화로운 해결책을 제안했습니다. 그래서 나는 당신의 대답이 해결책으로 받아 들여질 수 있다고 생각합니다. – Milkywayfarer

+0

코드에 대한 귀하의 의견은 thx 이상입니다.귀하의 질문에 대답 : – Milkywayfarer

+0

1) 네, 나는 문자열의 컬렉션을 사용하여 더 편리 할 것이 동의하지만, 이것은 단지 의문점을 명확히하기위한 시범적인 코드에 관한 것입니다. – Milkywayfarer

관련 문제