我有这个代码,当我运行脚本时,我传入了有效的参数,但我继续获得NPE。 帮助
代码:
private static Date getNearestDate(List<Date> dates, Date currentDate) {
long minDiff = -1, currentTime = currentDate.getTime();
Date minDate = null;
if (!dates.isEmpty() && currentDate != null) {
for (Date date : dates) {
long diff = Math.abs(currentTime - date.getTime());
if ((minDiff == -1) || (diff < minDiff)) {
minDiff = diff;
minDate = date;
}
}
}
return minDate;
}
我从上面代码的第2行得到NullPointerException,并使用以下代码将thisDate作为currentDate变量传递。
Date thisDate = null;
try {
thisDate = (new SimpleDateFormat("MM/dd/yyyy")).parse(Calendar.getInstance().getTime().toString());
} catch (Exception e) {}
答案 0 :(得分:3)
由于您已经表明第2行引发了NullPointerException
,我们可以推断出您为null
参数传递了currentDate
。 currentDate.getTime()
是第2行中唯一可以导致NullPointerException
的部分。
我刚刚编写了以下Test.java
代码,以便真正了解您的问题:
import java.util.*;
import java.text.*;
class Test {
public static void main(String[] args) {
Date thisDate = null;
try {
thisDate = (new SimpleDateFormat("MM/dd/yyyy")).parse(Calendar.getInstance().getTime().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
当我运行它时,我得到:
java.text.ParseException: Unparseable date: "Sat Aug 20 12:42:30 PDT 2011"
at java.text.DateFormat.parse(DateFormat.java:337)
at Test.main(Test.java:8)
问题在于,您的SimpleDateFormat.parse()
期望月/日/年格式,但Date
类的toString()
方法会为您提供不同的内容。
好像你真正想要的只是当前日期。为什么要格式化呢?只需将其修剪至完成即可:
Date thisDate = new Date(); // this gives you the current date
答案 1 :(得分:2)
你的界限:
thisDate = (new SimpleDateFormat("MM/dd/yyyy")).parse(Calendar.getInstance().getTime().toString());
确实是
null
)如果您修复了此行中的所有问题,最终结果将是包含当前时间的Date
对象。
获得此类Date
的更简单方法是:
thisDate = new Date();