SimpleDateFormat(Unparseable Exception)

时间:2016-01-13 01:47:08

标签: java exception

我正在尝试将字符串(从数据库)转换为日期。但是我得到了Unparseable Exception。 DateFrom和DateTo列是VarChar数据类型。

以下是代码:

DateFormat DateF = new SimpleDateFormat("yyyy-MM-dd", Locale.US);

HashMap<Date, Date> checkBothDate = new HashMap<Date, Date>();

rss = sta.executeQuery("select DateFrom, DateTo from table where EmpID = '" + session.getAttribute("EmpID") + "' ");
while (rss.next()) {
   String addDate1 = "";
   String addDate2 = "";

   addDate1 = rss.getString("DateFrom");
   addDate2 = rss.getString("DateTo");

   Date checkFromDate = DateF.parse(addDate1); 
   Date checkToDate = DateF.parse(addDate2);

   checkBothDate.put(checkFromDate, checkToDate);
}

boolean isInBetweenDate = false;

Set set = checkBothDate.entrySet();
Iterator itr = set.iterator();

while (itr.hasNext()) {

  Map.Entry mapEntry = (Map.Entry) itr.next();

  date1Check = (Date)mapEntry.getKey();
  date2Check = (Date)mapEntry.getValue();

}

if (d1.after(date1Check) || d1.before(date2Check) || d2.after(date1Check) || d2.before(date2Check)) {
                isInBetweenDate = true;
}

if (isInBetweenDate == true) {
                session.setAttribute("Error", "The date overlaps.");
} else {
   //something add in the database
}

示例输出为:

java.text.ParseException: Unparseable date: "2016-01-05"

示例输出来自DateFrom列。

1 个答案:

答案 0 :(得分:1)

实际上你正在将Date对象转换为字符串并使用格式&#34; yyyy-MM-dd&#34;进行解析。这是不可能的。

添加了要映射的日期对象

  Date checkFromDate = DateF.parse(addDate1); 
  Date checkToDate = DateF.parse(addDate2);
  checkBothDate.put(checkFromDate, checkToDate);

然后解析日期的toString,这将是&#34; Wed Jan 13 10:37:21 IST 2016&#34; 并导致解析异常

date1 = mapEntry.getKey().toString();
date2 = mapEntry.getValue().toString();
date1Check = DateF.parse(date1);
date2Check = DateF.parse(date2);

您必须避免遵循日期解析声明

date1Check = DateF.parse(date1);
date2Check = DateF.parse(date2);

而不只是从地图中获取对象并进行比较

date1Check = mapEntry.getKey();
date2Check = mapEntry.getValue();

并且必须比较您的日期对象,例如

d1.after(date1Check)