为什么compareTo不使用日期返回结果

时间:2019-08-21 13:47:19

标签: java

我的日期格式为“ yyyyMMdd” 我使用这两个函数将它们转换为日期:

第一个将“ yyyyMMdd”转换为“ yyyy-MM-dd”

private static String converteDate(String inputString) {

        SimpleDateFormat fromUser = new SimpleDateFormat("yyyyMMdd");
        SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

        String reformattedStr = null;
        try {
            reformattedStr = myFormat.format(fromUser.parse(inputString));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return reformattedStr;
    }

第二个功能是将“ yyyy-MM-dd”转换为日期类型:

public static Date convertToDate(String receivedDate) throws ParseException {

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    Date date = formatter.parse(receivedDate);
    return date;
}

然后我需要使用日期之间的比较来对日期进行排序,所以我使用了CompareTo函数:

public int compareTo(Personne personne) {
        int res = 0;
        Personne other = personne;
        // Conversion of Dates from String to Dates

        Date otherDate = null;
        try {
            otherDate = convertToDate(other.getDA_PRM_CTR_ORDER());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Date entreePersonne = null;
        try {
            entreePersonne = convertToDate(this.DA_PRM_CTR_ORDER);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        res = entreePersonne.compareTo(otherDate);

return res;
}

这是行不通的,它会返回

  

Thread.dispatchUncaughtException(Throwable)行:不可用

this

编辑:

如@MLem所说

当我调试时,它不会转换为日期,而是传递给异常:

this the given trace

这真的很奇怪,因为convertToDate函数可以正常地调整日期格式。

2 个答案:

答案 0 :(得分:0)

这是一个NullPointerException,请查看堆栈跟踪以了解其发生位置。

请注意,您的try / catch行为很危险,如果引发异常,则otherDate或entreePersonne变量将为null,这可能是导致NullPointerException的原因。

您的compareTo(Personne)应该引发ParseException,或者在无法解析日期的情况下有记录的行为。

编辑: 编辑后,我注意到您没有使用converteDate方法,因此您输入的日期为yyyyMMdd格式,并尝试使用yyyy-MM-dd格式对其进行解析,因此将解析为ParseException。

答案 1 :(得分:0)

很可能像其他人说的那样: 您的字符串不可解析,因此它会抛出静默的ParseException。 您的变量仍为null,对它们的任何调用均不会引发NullPointerException。 尝试回答这个问题:如果无法解析给定的字符串,该怎么办?在捕获块中完成。