没有秒的java字符串到日期转换

时间:2015-08-12 06:58:06

标签: java date-conversion

我必须将字符串转换为日期,以便在字符串有秒时它应该抛出错误。例如,如果我输入的字符串为“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");
}

4 个答案:

答案 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
}