DateUtil


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * 时间工具类
 */
public class DateUtil {


private static Log logger = LogFactory.getLog(DateUtil.class);

/**
* 获得当前系统时间
* 格式yyyy-MM-dd hh:mm:ss
* @return Date
* @author mshi
*/
public static final Date getCurrentTime(){
return Calendar.getInstance().getTime();
}


/**
* 获得当前系统时间
* 格式 yyyy-MM-dd
* @return Date
* @author mshi
*/
public static final Date getCurrentDate(){
return getDateIgnoreTime(Calendar.getInstance().getTime());
}

/**
* 获取时间上下间隔
* @param baseDate
* @return Date[]
* @author mshi
*/
public static final Date[] getDifferenceDate(Date baseDate) {
Date[] date = new Date[2];
Calendar cal = Calendar.getInstance();
cal.setTime(baseDate);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
date[0] = cal.getTime();
cal.add(Calendar.DATE, 1);
date[1] = cal.getTime();
return date;
}

/**
* 将时间的时分秒毫秒归零
* @param baseDate
* @return Date
* @author mshi
*/
public static final Date getDateIgnoreTime(Date baseDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(baseDate);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}

/**
* 比较两个日期差,精确到天
* @param date1
* @param date2
* @return int
* @author mshi
*/
public static final int compareByDate(Date date1, Date date2) {
int num = getDaysBetweenDates(date1, date2);
if (num > 0)
return 1;
else if (num < 0)
return -1;
return num;
    }
    
/**
* 获得两个日期差几天,精确到秒
* @param date1
* @param date2
* @return int
* @author mshi
*/
public static final int compareByDateTime(Date date1, Date date2) {
if (date1 == null || date2 == null) {
throw new IllegalArgumentException("Date cannot be null.");
}
TimeZone timeZone = TimeZone.getDefault();
long beginOffset = timeZone.getRawOffset();
long endOffset = beginOffset;
if (timeZone.inDaylightTime(date1)) beginOffset += timeZone.getDSTSavings();
if (timeZone.inDaylightTime(date2)) endOffset += timeZone.getDSTSavings();
long milli1 = (date1.getTime() + beginOffset) / 1000;
long milli2 = (date2.getTime() + endOffset) / 1000;
int retVal = 0;
if (milli1 > milli2) {
retVal = 1;
} else if (milli1 < milli2) {
retVal = -1;
}
return retVal;
}

/**
* 获得两个日期差几天,精确到毫秒
* @param date1
* @param date2
* @return int
* @author mshi
*/
public static final int compareByTimestamp(Date date1, Date date2) {
if(date1 ==null || date2 == null) {
throw new IllegalArgumentException("Date cannot be null.");  
}
TimeZone timeZone = TimeZone.getDefault();
        long beginOffset = timeZone.getRawOffset();
long endOffset = beginOffset;
if (timeZone.inDaylightTime(date1)) beginOffset += timeZone.getDSTSavings();
if (timeZone.inDaylightTime(date2)) endOffset += timeZone.getDSTSavings();
long milli1=date1.getTime() + beginOffset;
long milli2=date2.getTime() + endOffset;
int retVal = 0;
if (milli1 > milli2) {
retVal = 1;
} else if (milli1 < milli2) {
retVal = -1;
}
return retVal;
}

    /**
     * 获得两个日期差几天
     * @param endDate
     * @param beginDate
     * @return int
* @author mshi
     */
public static final int getDaysBetweenDates(Date endDate, Date beginDate) {
if (endDate == null || beginDate == null) {
throw new IllegalArgumentException("Date cannot be null.");  
}
return(getDaysBetweenDates((TimeZone)null, endDate, beginDate));
}

/**
* 获得两个日期差几天
* @param timeZone
* @param endDate
* @param beginDate
* @return int
* @author mshi
*/
public static final int getDaysBetweenDates(TimeZone timeZone, Date endDate, Date beginDate) {
if (beginDate == null || endDate == null)
throw new IllegalArgumentException("Date cannot be null.");
if (timeZone == null) timeZone = TimeZone.getDefault();
long beginOffset = timeZone.getRawOffset();
long endOffset = beginOffset;
if (timeZone.inDaylightTime(beginDate)) beginOffset += timeZone.getDSTSavings();
if (timeZone.inDaylightTime(endDate)) endOffset += timeZone.getDSTSavings();
long endDays = (long)((endDate.getTime() + endOffset) / 86400000L);
long beginDays = (long)((beginDate.getTime() + beginOffset) / 86400000L);
return((int)(endDays - beginDays));
}

/**
* 获得年份
* @param date
* @return int
* @author mshi
*/
public static final int getYear(Date date) {
        if (date == null) return 0;
        return getCalendarField(date, Calendar.YEAR);
    }

/**
* 获得月份
* @param date
* @return int
* @author mshi
*/
    public static final int getMonth(Date date) {
        if (date == null) return 0;
        return getCalendarField(date, Calendar.MONTH) + 1;
    }
    
    /**
     * 获得天数
     * @param date
     * @return int
* @author mshi
     */
    public static final int getDay(Date date) {
        if (date == null) return 0;
        return getCalendarField(date, Calendar.DAY_OF_MONTH);
    }
    
    /**
     * 获得小时
     * @param date
     * @return int
* @author mshi
     */
    public static final int getHour(Date date) {
        if (date == null) return 0;
        return getCalendarField(date, Calendar.HOUR_OF_DAY);
    }
    
    /**
     * 获得分钟
     * @param date
     * @return int
* @author mshi
     */
    public static final int getMinute(Date date) {
        if (date == null) return 0;
        return getCalendarField(date, Calendar.HOUR_OF_DAY);
    }
    
    /**
     * 获得秒
     * @param date
     * @return int
* @author mshi
     */  
    public static final int getSecond(Date date) {
        if (date == null) return 0;
        return getCalendarField(date, Calendar.SECOND);
    }
    
    /**
     * 获得毫秒
     * @param date
     * @return int
* @author mshi
     */
    public static final int getMilliSecond(Date date) {
        if (date == null) return 0;
        return getCalendarField(date, Calendar.MILLISECOND);
    }
    
    /**
     * 返回给定日历字段的值
     * @param date
     * @param field
     * @return int
* @author mshi
     */
    public static final int getCalendarField(Date date, int field){
Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(field);
}
    
    /**
     * 添加或减去指定的时间量,按年
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date addYear(Date date, int value){
    return add(date, Calendar.YEAR, value);
    } 


    /**
     * 添加或减去指定的时间量,按月
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date addMonth(Date date, int value){
    return add(date, Calendar.MONTH, value);
    } 
    
    /**
     * 添加或减去指定的时间量,按日
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date addDay(Date date, int value){
    return add(date, Calendar.DAY_OF_MONTH, value);
    }
    
    /**
     * 添加或减去指定的时间量,按小时
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date addHour(Date date, int value) {
        return add(date, Calendar.HOUR_OF_DAY, value);
    }
    
    /**
     * 添加或减去指定的时间量,按分钟
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date addMinute(Date date, int value) {
    return add(date, Calendar.MINUTE, value);
    }
    
    /**
     * 添加或减去指定的时间量,按秒
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date addSecond(Date date, int value) {
    return add(date, Calendar.SECOND, value);
    }
    
    /**
     * 添加或减去指定的时间量,按毫秒
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date addMilliSecond(Date date, int value) {
    return add(date, Calendar.MILLISECOND, value);
    }
    
    /**
     * 添加或减去指定的时间量
     * @param date
     * @param field
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date add(Date date, int field, int value){
    Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(field, value);
        return cal.getTime();
    }
    
    /**
     * 设置指定的时间量,按年
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date setYear(Date date, int value){
    return set(date, Calendar.YEAR, value);
    } 
    
    /**
     * 设置指定的时间量,按月
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date setMonth(Date date, int value){
    return set(date, Calendar.MONTH, value);
    } 
    
    /**
     * 设置指定的时间量,按日
     * @param date
     * @param value
     * @return Date
* @author mshi
     */    
    public static final Date setDay(Date date, int value){
    return set(date, Calendar.DAY_OF_MONTH, value);
    }
    
    /**
     * 设置指定的时间量,按小时
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date setHour(Date date, int value) {
        return set(date, Calendar.HOUR_OF_DAY, value);
    }
    
    /**
     * 设置指定的时间量,按分钟
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date setMinute(Date date, int value) {
    return set(date, Calendar.HOUR_OF_DAY, value);
    }
    
    /**
     * 设置指定的时间量,按秒
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date setSecond(Date date, int value) {
    return set(date, Calendar.SECOND, value);
    }
    
    /**
     * 设置指定的时间量,按毫秒
     * @param date
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date setMilliSecond(Date date, int value) {
    return set(date, Calendar.MILLISECOND, value);
    }
    
    /**
     * 设置指定的时间量
     * @param date
     * @param field
     * @param value
     * @return Date
* @author mshi
     */
    public static final Date set(Date date, int field, int value){
    Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(field, value);
        return cal.getTime();
    }

/**
* 设置日期为当月的最后一天
* @param date
* @return Date
* @author mshi
*/
public static final Date lastDate(Date date){
return addDay(addMonth(setDay(date, 1), 1), -1);
}

/**
* 设置日期为当月的第一天
* @param date
* @return Date
* @author mshi
*/
public static final Date firstDate(Date date){
return setDay(date, 1);
}

/**
* 是否是当月最后一天
* @param date
* @return boolean
* @author mshi
*/
public static final boolean isLastDate(Date date) {
Date _date = date;
Date lastDate = lastDate(_date);
if (compareByDate(date, lastDate) == 0) {
return true;
}
return false;
}

/**
* 是否是当月第一天
* @param date
* @return boolean
* @author mshi
*/
public static final boolean isFirstDate(Date date) {
Date _date = date;
Date firstDate = firstDate(_date);
if (compareByDate(date, firstDate) == 0) {
return true;
}
return false;
}

/**
* 是否是同一天
* @param date1
* @param date2
* @return boolean
* @author mshi
*/
public static final boolean isSameDate(Date date1, Date date2) {
if (compareByDate(getDateIgnoreTime(date1), getDateIgnoreTime(date2)) == 0) {
return true;
}
return false;
}

/**
* 是否是同一天月
* @param date1
* @param date2
* @return boolean
* @author mshi
*/
public static boolean isSameMonth(Date date1, Date date2) {
if (getMonth(date1) == getMonth(date2)) {
return true;
}
return false;
}

/**
* 是否是同一天年
* @param date1
* @param date2
* @return boolean
* @author mshi
*/
public static boolean isSameYear(Date date1, Date date2) {
if (getYear(date1) == getYear(date2)) {
return true;
}
return false;
}

    /**
     * 根据指定格式格式化时间
     * @param date
     * @param fmtString
     * @return String
* @author mshi
     */
    public static final String format(Date date, String fmtString) {
DateFormat format = new SimpleDateFormat(fmtString);
return format.format(date);
}
    
    /**
     * 格式格式化时间("yyyy-MM-dd")
     * @param date
     * @return String
* @author mshi
     */
    public static final String formatDate(Date date) {
if (null == date)
return null;
return format(date, "yyyy-MM-dd");
}
    
    /**
     * 格式格式化时间("yyyy-MM-dd HH:mm:ss")
     * @param date
     * @return String
* @author mshi
     */
    public static final String formatTime(Date date) {
if (null == date)
return null;
    return format(date, "yyyy-MM-dd HH:mm:ss");
}
    
    /**
     * 根据指定格式解析时间
     * @param dateString
     * @param fmtString
     * @return Date
* @author mshi
     */
public static final Date parse(String dateString, String fmtString){
Date date = null;
try {
DateFormat format = new SimpleDateFormat(fmtString);
date = format.parse(dateString);
} catch (ParseException e) {
logger.error("parse(String, String) parse error", e);
}
return date;
}

    /**
     * 解析时间("yyyy-MM-dd")
     * @param dateString
     * @return Date
* @author mshi
     */
public static final Date parseDate(String dateString){
return parse(dateString, "yyyy-MM-dd");
}


    /**
     * 解析时间("yyyy-MM-dd hh:mm:ss")
     * @param dateString
     * @return Date
* @author mshi
     */
public static final Date parseTime(String dateString){
return parse(dateString, "yyyy-MM-dd HH:mm:ss");
}
    /**
     * 解析时间("yyyy-MM-dd hh:mm:ss")
     * @param dateString
     * @return Date
* @author mshi
     */
public static final Date endOfDay(Date date){
date=set(date, Calendar.HOUR_OF_DAY, 23);
date=set(date, Calendar.MINUTE, 59);
return date;
}
}

你可能感兴趣的:(util)