SimpleDateFormat使用JDK7返回NULL Date,但与JDK6一起正常工作

时间:2013-03-06 10:10:57

标签: java-7

我有这个示例java代码,我试图根据SimpleDateFormat上设置的模式将String解析为Date。当我在JDK6中运行此代码时,它的工作正常。但是在JDK7中,在解析调用时返回NULL。知道用JDK7改变了什么。这是一个已知问题还是任何解决方法?

  SimpleDateFormat _theSimpleDateFormatHelper =  new SimpleDateFormat();
  _theSimpleDateFormatHelper.setLenient(false);
  _theSimpleDateFormatHelper.applyPattern("yyyy-MM-dd hh:mm:ss");

  ParsePosition parsePos = new ParsePosition(0);
  Object formattedObj = _theSimpleDateFormatHelper.parse("1989-09-21 00:00:00", parsePos);

1 个答案:

答案 0 :(得分:1)

以下代码可以正常使用:

SimpleDateFormat _theSimpleDateFormatHelper =  new SimpleDateFormat();
//_theSimpleDateFormatHelper.setLenient(false); <-- In lenient mode, the parsing succeeds
_theSimpleDateFormatHelper.applyPattern("yyyy-MM-dd hh:mm:ss");

ParsePosition parsePos = new ParsePosition(0);
Object formattedObj = _theSimpleDateFormatHelper.parse("1989-09-21 00:00:00", parsePos);

它不起作用的原因是因为严格模式下格式不正确。在此页http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html中,您可以看到h范围是1-12。

如果您使用H,则范围为0-23,这也可以使用:

SimpleDateFormat _theSimpleDateFormatHelper =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
_theSimpleDateFormatHelper.setLenient(false);
Object formattedObj = _theSimpleDateFormatHelper.parse("1989-09-21 00:00:00");