最近在修改用到Hibernate的项目,遇到一个小问题,由于Hibernate自带的查询方法是将日期以Date格式传递给查询语句的参数
如:
// 日期范围----组合查询语句
if (!dateBegin.equals("") && !dateEnd.equals(""))
{
str += " and s.DLendDate >= :dateBegin and s.DLendDate <= :dateEnd ";
}
// 日期范围----对应参数置入
if (!dateBegin.equals("") && !dateEnd.equals(""))
{
query.setDate("dateBegin", CommonUtil.strToDate(dateBegin));
query.setDate("dateEnd", CommonUtil.strToEndDate(dateBegin));
}
以上关键是在两个字符转换成日期的方法中,如果都调用CommonUtil.strToDate()方法是查询不到结果的
原因如下:
public static Date strToDate(String szDate)
{
try
{
if (isStringDate(szDate))
{
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
Date date = fmt.parse(szDate);
System.out.println(szDate + " ==> " + date); // 2011-12-23 ==> Fri Dec 23 00:00:00 GMT 2011 (打印结果)
return date;
}
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
需要另外写一个结束日期获取的方法(在原有日期上加一天)
public static Date strToEndDate(String szDate)
{
try
{
if (isStringDate(szDate))
{
szDate = addDay(szDate, 1);
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
Date date = fmt.parse(szDate);
System.out.println(szDate + " ==> " + date);// 2011-12-24 ==> Fri Dec 23 00:00:00 GMT 2011 (打印结果)
return date;
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
//实现日期加一天的方法
public static String addDay(String s, int n) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cd = Calendar.getInstance();
cd.setTime(sdf.parse(s));
cd.add(Calendar.DATE, n);//增加一天
//cd.add(Calendar.MONTH, n);//增加一个月
return sdf.format(cd.getTime());
} catch (Exception e) {
return null;
}
}