6

是否可以检索给定语言环境的默认模式,而无需将返回的对象转换DateFormat.get*Instance()为 a 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 所独有的,这就是您要转换它的原因。

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

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

如果我可以问,你为什么返回一个连接的字符串而不是一个字符串集合?循环遍历结果似乎会更容易。

如果连接的 String 是必不可少的,请使用 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 回答