DateUtil

package com.creditcities.crm.common.util;

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");
    }
    
    /**
     * 格式格式化时间("yyyyMMdd")
     * @param date
     * @return String
     * @author mshi
     */
    public static final String formatDateNotSplit(Date date) {
        if (null == date)
            return null;
        return format(date, "yyyyMMdd");
    }
    
    /**
     * 格式格式化时间("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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值