我正在尝试理解一些SimpleDateFormat代码。特别是,我正在尝试在SimpleDateFormat中使用本地化的模式字符串。根据javadoc的说明:
生成输出:
如果我将最后一行替换为"
另一方面,如果我使用任何英语化模式字符串创建SimpleDateFormat实例,然后调用"
因此,似乎不能在SimpleDateFormat的构造函数中使用本地化模式字符串,而需要进行两步初始化。这是有意为之的行为吗?
SimpleDateFormat还支持本地化日期和时间模式字符串。在这些字符串中,上面描述的模式字母可以用其他依赖于语言环境的模式字母替换。
它还指定了一个SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
构造函数:
使用给定的模式和日期格式符号构造SimpleDateFormat。
然而,尽管getLocalPatternChars()
实例显示预期的模式字符,但SimpleDateFormat的构造函数仍会拒绝包含这些字符的模式:
public void run() {
Locale loc = new Locale("de", "de");
DateFormatSymbols dfs = new DateFormatSymbols(loc);
String sym = dfs.getLocalPatternChars();
System.out.println(sym);
SimpleDateFormat datefmt = new SimpleDateFormat("tt.MM.uuuu", dfs);
}
生成输出:
GuMtkHmsSEDFwWahKzZ
Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 't'
at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:845)
...
如果我将最后一行替换为"
... new SimpleDateFormat("tt.MM.uuuu", loc);
",将得到相同的输出结果。另一方面,如果我使用任何英语化模式字符串创建SimpleDateFormat实例,然后调用"
applyLocalizedPattern("tt.MM.uuuu")
",则本地化模式将被接受。因此,似乎不能在SimpleDateFormat的构造函数中使用本地化模式字符串,而需要进行两步初始化。这是有意为之的行为吗?
translatePattern
(applyLocalizedPattern
执行此操作),因此这可能是一个错误或者是一个糟糕的 JavaDoc,没有清楚地解释构造函数的使用方法。 - Tom