我正在尝试理解一些SimpleDateFormat代码.特别是我试图在SimpleDateFormat中使用本地化的模式字符串.来自javadoc:
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);
}
Run Code Online (Sandbox Code Playgroud)
产生输出:
GuMtkHmsSEDFwWahKzZ
Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 't'
at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:845)
...
Run Code Online (Sandbox Code Playgroud)
如果我用" ... new SimpleDateFormat("tt.MM.uuuu", loc);" 替换最后一行,我得到相同的输出.
另一方面,如果我使用任何Anglicized模式字符串创建SimpleDateFormat实例,然后调用" applyLocalizedPattern("tt.MM.uuuu")",则接受本地化模式.
所以似乎不能在SimpleDateFormat的构造函数中使用本地化的模式字符串,并且需要这两步初始化.这是故意的行为吗?