2010-08-15 32 views
6

Czy można pobrać wzorzec domyślny dla danych ustawień narodowych, bez rzucania obiektu zwróconego przez DateFormat.get*Instance() do ?Czy istnieje inny sposób na odzyskanie domyślnego wzorca dla danego ustawienia narodowego?

Rozumiem, że w większości przypadków, wszystko będzie OK, ale jest notatka w javadoc, here: „Jeśli chcesz jeszcze większą kontrolę nad formatem lub analizowania, (lub chcesz dać użytkownikom więcej kontroli), możesz spróbować rzucić DateFormat, który otrzymałeś z fabrycznych metod na SimpleDateFormat. To zadziała w większości krajów; pamiętaj tylko, aby umieścić go w bloku try, jeśli napotkasz na nietypowy. "

Zastanawiam się, co powinienem zrobić, gdybym "napotkał niecodzienny"?

Related theme.

przykładowy kod:

/** 
* 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

Nie jestem pewien, czy możesz zrobić coś, jeśli "napotkasz coś niezwykłego", ponieważ może nie być oparty na wzorcach. Zwłaszcza, że ​​programista może dostarczyć własny "DateFormat" za pośrednictwem 'java.text.spi.DateFormatProvider'. –

Odpowiedz

1

można pobrać symbole formatu daty dla danego języka, wykonując następujący kod Java:

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

w tym konkretnym przypadku, holenderski, symbole format daty są takie same.

GyMdkHmsSEDFwWahKzZ 
GyMdkHmsSEDFwWahKzZ 

W przypadku, gdy symbole dla języka obcego są różne, zastępujesz znak języka obcego dla znaku angielskiego w prostym łańcuchu formatu.

Klasa DateFormatSymbols istnieje od co najmniej Java 1.4.2.

2

Sam wzór jest unikalny SimpleDateFormat dlatego jesteś rzucając go.

Jeśli znajdziesz DateFormat, który nie jest SimpleDateFormat, chcesz zarejestrować wyjątek, nagrywanie klasy rzeczywistej realizacji jest, i w tym momencie będziesz miał wystarczająco dużo informacji, aby zdecydować, jak sobie poradzić z sytuacją.

Na razie, ponieważ nie ma wzoru, nie dodawaj tego do listy wyników, jeśli nie jest to SimpleDateFormat.

Jeśli mogę zapytać, dlaczego zwracasz połączony ciąg zamiast kolekcji ciągów znaków? Wygląda na to, że łatwiej będzie przeglądać wyniki.

Jeśli połączony ciąg jest niezbędny, użyj narzędzia StringBuilder, aby go utworzyć, ponieważ utworzysz mniej obiektów i poprawisz wydajność. To dobry nawyk, kiedy budujesz Strings w pętli.

+0

Thx za odpowiedź. Chociaż nie dostarczyłeś bezpośredniej odpowiedzi na konkretne pytanie, zaproponowałeś harmonijne rozwiązanie, aby poradzić sobie z tą możliwą sytuacją (jak pokazuje praktyka bardzo mało prawdopodobna, ale jakkolwiek możliwa). Myślę więc, że twoja odpowiedź mogłaby zostać zaakceptowana jako rozwiązanie. – Milkywayfarer

+0

Więcej niż za twoje komentarze do kodu.Odpowiadając na twoje pytania: – Milkywayfarer

+0

1) tak, zgadzam się, że użycie kolekcji ciągów byłaby wygodniejsza, ale był to tylko przykładowy kod wyjaśniający, o co było pytanie. – Milkywayfarer

Powiązane problemy