SimpleDateFormat()在传递无效日期格式时不给出IllegalArgumentException



我传递%%#@-01-01作为日期格式,但没有得到例外。为什么?

SimpleDateFormat df = null;
df = new SimpleDateFormat("%%#@-01-01");

引用SimpleDateFormat的javadoc:

[…从'A'到'Z'和从'A'到'Z'的未加引号的字母被解释为表示日期或时间字符串组成部分的模式字母。文本可以使用单引号(')来引用,以避免解释。" " "表示单引号。所有其他字符不被解释;它们只是在格式化期间复制到输出字符串中,或者在解析期间与输入字符串进行匹配。

格式字符串%%#@-01-01不包含字母,但不要求至少包含一个字母。

证明它可以工作(好吧,"工作"在这里是一个相对的概念,因为它是相当无用的):

SimpleDateFormat fmt = new SimpleDateFormat("%%#@-01-01");
Date date = fmt.parse("%%#@-01-01");
System.out.println(date);
System.out.println(fmt.format(date));
try {
    fmt.parse("9999-01-01");
} catch (Exception e) {
    System.out.println(e);
}
输出

Thu Jan 01 00:00:00 EST 1970
%%#@-01-01
java.text.ParseException: Unparseable date: "9999-01-01"

您提供的模式(%%#@-01-01)不是无效的。只有字母需要加引号,所有其他符号都简单地复制到格式字符串中。来自文档(强调我的):

日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,从'A'到'Z'和从'A'到'Z'的未引号字母被解释为表示日期或时间字符串组成部分的模式字母。文本可以使用单引号(')来引用,以避免解释。" " "表示单引号。所有其他字符不被解释;它们只是在格式化期间复制到输出字符串中,或者在解析期间与输入字符串进行匹配。

相关内容

  • 没有找到相关文章

最新更新