Есть ли другой способ получить шаблон по умолчанию для данной локали? - PullRequest
6 голосов
/ 15 августа 2010

Возможно ли получить шаблон по умолчанию для данной локали, не приводя объект, возвращенный 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;
}

Ответы [ 2 ]

2 голосов
/ 08 мая 2011

Сам шаблон является уникальным для SimpleDateFormat, поэтому вы его приводите.

Если вы нашли DateFormat, который не является SimpleDateFormat, вы хотите зарегистрировать исключение, записав класс, которым является фактическая реализация, ив этот момент у вас будет достаточно информации, чтобы решить, как справиться с ситуацией.

Пока нет шаблона, поэтому не добавляйте этот шаблон в список результатов, если он не SimpleDateFormat.

Если я могу спросить: почему вы возвращаете сцепленную строку вместо набора строк?Кажется, было бы легче просмотреть ваши результаты.

Если важна объединенная строка, используйте StringBuilder для ее построения, поскольку вы создадите меньше объектов и улучшите производительность.При построении Strings в цикле это хорошая привычка.

1 голос
/ 29 декабря 2011

Вы можете получить символы формата даты для определенного языка, выполнив следующий код Java:

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

В данном конкретном случае, голландский, символы формата даты совпадают.

GyMdkHmsSEDFwWahKzZ
GyMdkHmsSEDFwWahKzZ

В случае, если символы для иностранного языка отличаются, вы заменяете символ иностранного языка на английский в простой строке формата.

Класс DateFormatSymbols существует, по крайней мере, с Java1.4.2.

...