java - 强制 SimpleDateFormat 解析整个字符串

标签 java date parsing datetime

我有一个以下格式的日期字符串:“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/

相关文章:

Java 进程作为非 root 占用 100% CPU,但作为 root 没问题

Java:关于字符集转换的建议

解析中的java日期问题

c# - 人类可读的日期格式

json - 从 Newtonsoft 的 JSON 序列化器解析 JSON 日期时间

python - 使用 python 解析 CSV 文件并转换为 Pandas Dataframe 以绘制 Django 模板的图形

java - urlrewrite 和 opensessioninviewfilter 不能一起工作

Java - 通过相对路径加载 dll 并将它们隐藏在 jar 中

java - 确定年份是否为闰年以及日期在 Blackberry 中是否有效

python - 从 Markdown 中解析元素