6

DateFormat.get*Instance()によって返されたオブジェクトを にキャストせずに、特定のロケールのデフォルト パターンを取得することは可能SimpleDateFormatですか?

ほとんどの場合、すべて問題ないことは理解していますがjavadocここにメモがあります。ファクトリメソッドDateFormatからSimpleDateFormat. _try

では、「いつもと違うものに遭遇」した場合はどうすればいいのだろうか?

関連テーマ。

コードサンプル:

/**
 * 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;
}
4

2 に答える 2

2

パターン自体は SimpleDateFormat に固有のものであるため、キャストしています。

SimpleDateFormat ではない DateFormat を見つけた場合は、例外をログに記録し、実際の実装であるクラスを記録します。その時点で、状況を処理する方法を決定するのに十分な情報が得られます。

今のところ、パターンがないため、SimpleDateFormat でない場合は、結果のリストにこれを追加しないでください。

私が尋ねることができれば、なぜ文字列のコレクションではなく、連結された文字列を返すのですか? 結果をループする方が簡単なようです。

連結された文字列が不可欠な場合は、作成するオブジェクトが少なくなり、パフォーマンスが向上するため、StringBuilder を使用して構築します。ループ内で文字列を構築するときは、良い習慣です。

于 2011-05-08T04:50:09.520 に答える
1

次の Java コードを実行すると、特定の言語の日付形式記号を取得できます。

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 から存在しています。

于 2011-12-29T17:45:04.473 に答える