嗨,我正在使用SimpleDateFormat来解析和比较字符串中的两个日期。这是我的代码

private static int compareDates(String lineFromFile, String givenDate) throws ParseException, IllegalArgumentException
  {
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    Date dateFromfile = sdf.parse(tmp);
    Date givenDateTime = sdf.parse(givenDate);
    if (dateFromfile.equals(givenDateTime))
    {
        return 0;
    }
    if (dateFromfile.before(givenDateTime))
    {
        return 1;
    }

        return -1;
    }


这是一种主要方法

public static void main(String[] args) {
    try
    {
        int result = compareDates("00:45:44", "09:35:56");
        System.out.println(line);
    }
    catch (ParseException e)

    {
        e.printStackTrace();
        System.out.println("ERROR");
    }

}


当我传递有效的参数时,这正常工作,但是!我想在传递例如“ 28:40:04”时有一个例外,现在我只有在传递为包含字母的参数字符串时才有例外。

最佳答案

您需要将lenient设置为false(默认行为是lenient):

sdf.setLenient(false);


请参见What is the use of "lenient "?javadoc


  指定日期/时间解析是否宽松。通过宽大的解析,解析器可以使用启发式方法来解释与该对象的格式不完全匹配的输入。在严格分析的情况下,输入必须与该对象的格式匹配。

07-25 22:47