我正在尝试将字符串(从数据库)转换为日期。但是我得到了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列。
答案 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)