小编Bob*_*hur的帖子

SimpleDateFormat具有本地化模式的非法模式字符错误

我正在尝试理解一些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的构造函数中使用本地化的模式字符串,并且需要这两步初始化.这是故意的行为吗?

java localization simpledateformat

6
推荐指数
1
解决办法
1795
查看次数

标签 统计

java ×1

localization ×1

simpledateformat ×1