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

时间:2015-09-04 06:26:21

标签: java simpledateformat illegalargumentexception

我以%%#@-01-01作为日期格式,但没有例外。为什么呢?

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

2 个答案:

答案 0 :(得分:1)

引用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"

答案 1 :(得分:0)

您提供的模式(%%#@-01-01)无效。只需要引用字母,所有其他符号只需复制到格式字符串中。来自docs(强调我的):

  

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