Java SimpleDataFormat.parse将errorIndex返回为0
使用jdk1.7.0_55,在时区不是标准时区的情况下,我将parseposition.errorIndex设置为0 但是使用jdk1.6.0_38,我得到的parseposition.errorIndex为21,用于相同的错误时区格式 以下是示例:Java SimpleDataFormat.parse将errorIndex返回为0,java,java-7,simpledateformat,jdk1.6,Java,Java 7,Simpledateformat,Jdk1.6,使用jdk1.7.0_55,在时区不是标准时区的情况下,我将parseposition.errorIndex设置为0 但是使用jdk1.6.0_38,我得到的parseposition.errorIndex为21,用于相同的错误时区格式 以下是示例: String date = "13 Jan 2005 21:45:34 ABC"; String format = "dd MMM yyyy HH:mm:ss z"; ParsePosition pp = new ParsePosition(0);
String date = "13 Jan 2005 21:45:34 ABC";
String format = "dd MMM yyyy HH:mm:ss z";
ParsePosition pp = new ParsePosition(0);
pp.setIndex(0);
SimpleDateFormat sd = new SimpleDateFormat(format,Locale.ENGLISH);
Date d = sd.parse(date,pp);
System.out.println("Error Index "+pp.getErrorIndex());
使用jdk 6的结果:
误差指数21
使用jdk7的结果
错误索引0
为什么会有区别呢
请帮助事实上,这是一种倒退。在最新的Java8版本中仍然处于崩溃状态。公共OpenJDK bug跟踪器并没有列出它,所以我已经将它报告给了Oracle以供审查。它由Oracle跟踪,审查ID为JI-9021556
不幸的是,您无法修复此问题。我可以复制它。显然是一种倒退。您可以将此消息作为bug发送给OpenJDK。不应该这样,但看起来jdk 6给了您日期,7给了您pp。如果我使用parse(date)方法,两者都会引发异常。在jdk 6中,错误索引为正确位置,在jdk 7中,错误索引为0@泰勒库尔特尼这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。这是一个答案。答案是:这是JDK中的一个回归。此注释在审阅期间自动插入。我不想争论“看起来像一个…”和“是一个…”之间的细微差别,但也许你可以用可信的信息来扩展答案,例如链接到你的bug报告。谢谢你的挑剔,我更改了答案的措辞。此外,我会在收到oracle的bug ID后立即更新答案。然而,他们的bugtracker只有一部分是公开的,但这意味着没有解决方案,这是一个答案。