是否可以检索给定语言环境的默认模式,而不将DateFormat.get*Instance()
返回的对象强制转换为SimpleDateFormat
?
我理解,在大多数情况下一切都会好的,但javadoc
,here中有一个注释:“如果你想要更多地控制格式或解析,(或者想要为您的用户提供更多控制权),您可以尝试将从工厂方法获得的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;
}
答案 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之后。