我的日期格式为“ 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所说
当我调试时,它不会转换为日期,而是传递给异常:
这真的很奇怪,因为convertToDate函数可以正常地调整日期格式。
答案 0 :(得分:0)
这是一个NullPointerException,请查看堆栈跟踪以了解其发生位置。
请注意,您的try / catch行为很危险,如果引发异常,则otherDate或entreePersonne变量将为null,这可能是导致NullPointerException的原因。
您的compareTo(Personne)应该引发ParseException,或者在无法解析日期的情况下有记录的行为。
编辑: 编辑后,我注意到您没有使用converteDate方法,因此您输入的日期为yyyyMMdd格式,并尝试使用yyyy-MM-dd格式对其进行解析,因此将解析为ParseException。
答案 1 :(得分:0)
很可能像其他人说的那样: 您的字符串不可解析,因此它会抛出静默的ParseException。 您的变量仍为null,对它们的任何调用均不会引发NullPointerException。 尝试回答这个问题:如果无法解析给定的字符串,该怎么办?在捕获块中完成。