Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是Java DateFormat错误吗?_Java_Date Format_Simpledateformat - Fatal编程技术网

这是Java DateFormat错误吗?

这是Java DateFormat错误吗?,java,date-format,simpledateformat,Java,Date Format,Simpledateformat,模式为“dd-MM-yyyy” 我认为字符串“01-01-2010MWWWWW”不符合模式,但下面的代码显示了相反的情况 谁能解释为什么 public static void main(String[] args) throws Exception { SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); Date date = df.parse("01-01-2010mwwwwwwwwwwwwwww");

模式为“dd-MM-yyyy”

我认为字符串“01-01-2010MWWWWW”不符合模式,但下面的代码显示了相反的情况

谁能解释为什么

public static void main(String[] args) throws Exception {

    SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");

    Date date = df.parse("01-01-2010mwwwwwwwwwwwwwww");

    System.out.println(date);
}

谢谢

解析方法不会尝试匹配整个输入字符串。也就是说,前缀
01-01-2010
匹配,这就足够了

发件人:

解析给定字符串开头的文本以生成日期该方法不能使用给定字符串的整个文本。


如果您需要确定这是否是“完全匹配”,您可以尝试以下方法:

SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");

String strDate = "01-01-2010mwwwwwwwwwwwwwww";
ParsePosition pp = new ParsePosition(0);
Date date = df.parse(strDate, pp);
System.out.println("Complete match: " + (pp.getIndex() == strDate.length()));

strDate = "01-01-2010";
pp = new ParsePosition(0);
date = df.parse(strDate, pp);
System.out.println("Complete match: " + (pp.getIndex() == strDate.length()));
这张照片

Complete match: false
Complete match: true

这是因为DateFormat的默认lenient参数为true。这意味着解析器将解析输入字符串,即使它的格式不正确。这将(有时)导致错误的结果

另一方面,我们可以强制解析器严格遵守给定的模式。这意味着不正确的输入字符串将引发异常

public static void main(String[] args) throws Exception {
  SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
  df.setLenient(false); // Switch to strict mode
  Date date = df.parse("01-01-2010mwwwwwwwwwwwwwww"); // This will throw an exception
  System.out.println(date);
}

不幸的是,DateFormat以静默方式解析this.NAPWAD(这不是设计的问题),这个答案完全是错误的,因为结果与宽容标志无关。