是否有另一种方法来检索给定语言环境的默认模式?

时间:2010-08-15 18:23:12

标签: java locale simpledateformat

是否可以检索给定语言环境的默认模式,而不将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;
}

2 个答案:

答案 0 :(得分:2)

模式本身是SimpleDateFormat独有的,这就是你投射它的原因。

如果你发现一个不是SimpleDateFormat的DateFormat,你想记录异常,记录实际实现的类,那时你将有足够的信息来决定如何处理这种情况。

目前,由于没有模式,如果不是SimpleDateFormat,请不要将此项添加到结果列表中。

如果我可以问一下,为什么要返回连接的字符串而不是字符串集合?看起来循环结果会更容易。

如果连接的字符串是必需的,请使用StringBuilder来构建它,因为您将创建更少的对象并提高性能。在循环中构建字符串时,这是一个很好的习惯。

答案 1 :(得分: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之后。