【发布时间】:2015-09-25 07:58:23
【问题描述】:
我有一个格式如下的日期字符串:"dd/MM/yyyy HH:mm:ss"。我想从中创建一个Date 对象,并且我正在使用SimpleDateFormat 类。我们的应用程序接受存储在String 数组中的许多不同日期格式。我们所做的是遍历该数组,使用applyPattern 到我们的SimpleDateFormat 对象并尝试parse 给定的日期字符串。如果它抛出异常,我们会尝试数组中的下一个日期格式等。
但是我发现SimpleDateFormat 类的parse 方法不一定会尝试解析整个字符串。如果它成功地从字符串的某些部分创建了一个 Date 对象,那么它将返回它。这里的问题是我们给定的日期字符串同时包含日期和时间数据,但是在我们的第一次parse 尝试中,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
【问题讨论】:
-
您能否展示一些代码以便我们更好地了解您的问题是什么?
-
并显示示例数据。
-
@Tunaki 不是已经很清楚了吗? OP 喜欢防止像 "dd/MM/yyyy" 这样的模式来解析具有模式 "dd/MM/yyyy HH:mm:ss" 的字符串(例如 "25/ 09/2015 10:00:00"),因为他会失去时间价值。
-
@Tom 没错。我想将格式与给出的字符串完美匹配,否则抛出异常。
-
你能改变测试模式的顺序,最后使用这个吗?或者您可以扩展
SimpleDateFormat并在解析之前测试字符串长度吗?
标签: java date parsing datetime