import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang.time.*;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
/**
* 在Hibernate Criterion查询中日期处理相关的方法
* @author harvey
*
*/
public class HibernateDateUtil {
private static String yearMMpattern="yyyyMM";
private static String datepattern="yyyy-MM-dd HH:mm:ss";
private static String daypattern="yyyy-MM-dd";
private static String yearpattern="yyyy";
private static String otherpattern="yyyy-MM";
/**
* 等于某天
* @param field
* @param day
* @return
*/
public static Criterion eqDay(String field,Date day){
day = DateUtils.ceiling(day, Calendar.DAY_OF_MONTH);
Date nextday = DateUtils.addDays(day, 1);
return Restrictions.and(Restrictions.ge(field, day), Restrictions.lt(field, nextday));
}
/**
* 大于等于某天
* @param field
* @param day
* @return
*/
public static Criterion geDay(String field,Date day){
day = DateUtils.ceiling(day, Calendar.DAY_OF_MONTH);
return Restrictions.ge(field, day);
}
/**
* 小于等于某天
* @param field
* @param nextday
* @return
*/
public static Criterion ltDay(String field,Date day){
day = DateUtils.ceiling(day, Calendar.DAY_OF_MONTH);
Date nextday = DateUtils.addDays(day, 1);
return Restrictions.lt(field, nextday);
}
/**
* 获得日期的年份
* @param date
* @return
*/
public static String formatYearMonth(Date date){
if(date==null)
return "";
SimpleDateFormat sdf=new SimpleDateFormat(yearMMpattern);
return sdf.format(date);
}
/**
* 格式化日期
* @param date
* @return
*/
public static String formatDate(Date date){
if(date==null){
return "";
}
SimpleDateFormat sdf=new SimpleDateFormat(datepattern);
return sdf.format(date);
}
/**
* 格式化日期
* @param day
* @return
*/
public static String formatDay(Date date){
if(date==null)
return "";
SimpleDateFormat sdf=new SimpleDateFormat(daypattern);
return sdf.format(date);
}
/**
* 格式化日期,获得年份
* @param day
* @return
*/
public static String formatYear(Date date){
if(date==null)
return "";
SimpleDateFormat sdf=new SimpleDateFormat(yearpattern);
return sdf.format(date);
}
/**
* 格式化日期,形式"yyyy-MM"
* @param date
* @return
*/
public static String formatOther(Date date){
if(date==null)
return "";
SimpleDateFormat sdf=new SimpleDateFormat(otherpattern);
return sdf.format(date);
}
/**
* 把字符串转换为日期类型(yyyy-mm)
* @param strDate
* @return
* @throws ParseException
*/
public static Date parseDate(String strDate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat(otherpattern);
return sdf.parse(strDate);
}
/**
* 把字符串转换为日期类型(yyyy-mm-dd)
* @param strDate
* @return
* @throws ParseException
*/
public static Date parseddDate(String strDate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat(daypattern);
return sdf.parse(strDate);
}
/**
* 返回两个日期间的差异天数
*
* @param date1
* 参照日期
* @param date2
* 比较日期
* @return 参照日期与比较日期之间的天数差异,正数表示参照日期在比较日期之后,0表示两个日期同天,负数表示参照日期在比较日期之前
*/
public static long getMinusdate(String date1, String date2) {
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
ParsePosition pos = new ParsePosition(0);
ParsePosition pos1 = new ParsePosition(0);
Date dt1 = formatter.parse(date1, pos);
Date dt2 = formatter.parse(date2, pos1);
long diff = dt2.getTime() - dt1.getTime();
return (int)(diff / (1000 * 60 * 60 * 24));
}
/**
* 返回两个日期间的差异天数
*
* @param date1
* 参照日期
* @param date2
* 比较日期
* @return 参照日期与比较日期之间的天数差异,正数表示参照日期在比较日期之后,0表示两个日期同天,负数表示参照日期在比较日期之前
*/
public static int dayDiff(Date date1, Date date2) {
long diff = date1.getTime() - date2.getTime();
return (int) (diff / (1000 * 60 * 60 * 24));
}
}