我必须将字符串转换为日期,以便在字符串有秒时它应该抛出错误。例如,如果我输入的字符串为“2015-08-12 12:24:08”,我应该收到一个错误,因为我在字符串中给出了秒数(即,这里是08),而如果我将输入作为“2015-” 08-12 12:24“我不应该有任何错误。我怎样才能做到这一点?
我试过下面的代码
String oldstring2 = "2015-08-12 12:24:08";
Date date2 = null;
try {
date2 = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(oldstring2);
System.out.println(date2);
System.out.println("success");
} catch (ParseException e) {
e.printStackTrace();
System.out.println("error");
}
答案 0 :(得分:4)
使用Java 8,您可以使用DateTimeFormatter类。因为这会执行严格的解析而不是像SimpleDateFormat那样从头开始匹配:
String string = "2015-08-12 12:24";
TemporalAccessor ta = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").parse(string);
LocalDate date = LocalDate.from(ta);
当您将字符串更改为包含秒时,parse方法将抛出异常:
java.time.format.DateTimeParseException: Text '2015-08-12 12:24:12' could not be parsed, unparsed text found at index 16
答案 1 :(得分:0)
请试试这个:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConversion {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
Date d = sdf.parse("2015-08-12 12:24:08");
System.out.println(d);
}
}
答案 2 :(得分:0)
String oldstring2 = "2015-08-12 12:24";
String[] str = oldstring2.split(" ");
if(str[1]!=null){
String[] str2 = str[1].split(":");
if(str2.length == 2)
System.out.println("success");
else
System.out.println("error");
}
如果您的输入日期与您每次指定的完全相同,则上述代码将起作用。
答案 3 :(得分:-1)
正则表达式可以实现目标:
String oldstring2 = "2015-08-12 12:24";
Pattern p = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?"
+ "((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))"
+ "|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|"
+ "(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|"
+ "([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?"
+ "((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|"
+ "([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))"
+ "(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])()))?$");
if (p.matcher(oldstring2).matches()) {
// do something
} else {
// return the error
}