2010-08-15 5 views
6

Ist es möglich, ein Standardmuster für ein bestimmtes Gebietsschema abzurufen, ohne ein von DateFormat.get*Instance() zurückgegebenes Objekt an eine SimpleDateFormat zu übergeben?Gibt es eine andere Möglichkeit, Standardmuster für ein bestimmtes Gebietsschema abzurufen?

Ich verstehe, dass in den meisten Fällen alles in Ordnung sein wird, aber es gibt einen Hinweis in javadoc, here: "Wenn Sie noch mehr Kontrolle über das Format oder Parsing haben wollen (oder Ihren Benutzern mehr Kontrolle geben wollen) Sie können versuchen, die DateFormat Gießen Sie von der Fabrik Methoden zu einem SimpleDateFormat. Dies wird für die Mehrheit der Länder funktionieren; nur daran erinnern, es in einen try Block zu setzen, falls Sie eine ungewöhnliche treffen. "

Also frage ich mich, was soll ich tun, wenn ich "eine ungewöhnliche begegne"?

Related theme.

Codebeispiel:

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

Ich bin nicht sicher, ob Sie etwas tun können, wenn Sie "eine ungewöhnliche Begegnung haben", weil es möglicherweise nicht musterbasiert ist. Vor allem, weil ein Entwickler sein eigenes 'DateFormat' über' java.text.spi.DateFormatProvider' bereitstellen kann. –

Antwort

1

Sie können die Datumsformat-Symbole für eine bestimmte Sprache abrufen, indem Sie den folgenden Java-Code ausführen:

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

In diesem speziellen Fall, Niederländisch, sind die Datumsformat-Symbole gleich.

GyMdkHmsSEDFwWahKzZ 
GyMdkHmsSEDFwWahKzZ 

Wenn die Symbole für die Fremdsprache unterschiedlich sind, ersetzen Sie das Fremdzeichen für das englische Zeichen in der einfachen Formatzeichenfolge.

Die Klasse DateFormatSymbols existiert seit mindestens Java 1.4.2.

2

Das Muster selbst ist einzigartig für Simple, weshalb Sie es sind zu werfen.

Wenn Sie ein DateFormat finden, das kein SimpleDateFormat ist, möchten Sie die Ausnahme protokollieren und die Klasse der tatsächlichen Implementierung aufzeichnen. An diesem Punkt haben Sie genügend Informationen, um zu entscheiden, wie Sie mit der Situation umgehen.

Für jetzt, da es kein Muster gibt, fügen Sie dieses nicht zur Liste der Ergebnisse hinzu, wenn es nicht SimpleDateFormat ist.

Wenn ich fragen kann, warum Sie einen verketteten String anstelle einer Sammlung von Strings zurückgeben? Es scheint einfacher zu sein, Ihre Ergebnisse zu durchlaufen.

Wenn der verkettete String erforderlich ist, verwenden Sie StringBuilder, um ihn zu erstellen, da Sie weniger Objekte erstellen und die Leistung verbessern. Es ist eine gute Gewohnheit, wenn man Strings in einer Schleife baut.

+0

Danke für Ihre Antwort. Obwohl Sie keine direkte Antwort auf eine konkrete Frage gegeben haben, haben Sie eine harmonische Lösung vorgeschlagen, um mit dieser möglichen Situation umzugehen (wie durch Praxis sehr unwahrscheinlich Situation gezeigt, aber wie auch immer möglich). Ich denke, Ihre Antwort könnte als Lösung akzeptiert werden. – Milkywayfarer

+0

Mehr über thx für Ihre Kommentare zum Code.Beantworten Sie Ihre Fragen: – Milkywayfarer

+0

1) ja, ich stimme zu, dass die Verwendung von Sammlung von Zeichenfolgen bequemer wäre, aber das war nur demonstrative Code, um zu klären, worum es ging. – Milkywayfarer