我有一个以下格式的日期字符串:“dd/MM/yyyy HH:mm:ss”
。我想从中创建一个 Date
对象,并且我正在使用 SimpleDateFormat
类。我们的应用程序接受存储在 String
数组中的许多不同的日期格式。我们所做的是迭代该数组,对我们的 SimpleDateFormat
对象使用 applyPattern
并尝试解析
给定的日期字符串。如果它抛出异常,我们会尝试数组中的下一个日期格式等。
但是我发现 SimpleDateFormat
类的 parse
方法不一定会尝试解析整个字符串。如果它成功地从字符串的一部分创建了一个 Date 对象,那么它就会返回它。这里的问题是我们给定的日期字符串包含日期和时间数据,但是在我们的第一次解析
尝试中,SimpleDateFormat
使用了更简单的模式:“dd/MM/yyyy”
。由于在解析过程中它在给定的日期字符串中找到了匹配的日期,因此它会在那里停止并创建一个没有时间信息的 Date
对象。
有没有办法强制 SimpleDateFormat
解析给定的整个字符串?
String dateString = "01/01/2015 05:30:00";
Date date = null;
for (String format : Constants.DATE_FORMATS) {//String Array that contains many date format strings.
try {
simpleDateFormat.applyPattern(format);//First format applied is "dd/MM/yyyy".
date = simpleDateFormat.parse(dateString);
//No exception thrown it accepts the "dd/MM/yyyy" part of the dateString even though the string itself contains even more data.
}
catch (Exception e) {}
}
//Returns a date object with the time set to 00:00:00
最佳答案
您可以通过提供 ParsePosition
来检查已解析的输入量。 parse
方法更新位置来告诉您它解析了多少。
ParsePosition pos = new ParsePosition(0);
date = simpleDateFormat.parse(dateString, pos);
if (pos.getIndex() < dateString.length()) {
// did not parse all of dateString
}
关于java - 强制 SimpleDateFormat 解析整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777439/