DateUtil

来源:互联网 发布:如何打开usb端口 编辑:程序博客网 时间:2024/05/21 17:11
/** * 日期工具类  *  * @author chenxin * @version [版本号, 2012-5-21] * @see [相关类/方法] * @since [产品/模块版本] */public class DateUtil {/** * 默认的格式:yyyy-MM-dd */public static final String PATTERN_DEFAULT = "yyyy-MM-dd";    public static final String FORMAT_STANDARD = "yyyy-MM-dd HH:mm:ss";    public static final String FORMAT_YYYYMMDD = "yyyyMMdd";    public static final String FORMAT_YYYYMMDDHHMMSS = "yyyyMMddHHmmss";    public static final String CHINESE_SHORT_DATE = "yyyy年M月d日";    private static final String[] weekDays = { "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };/** * 转换日期格式 * @param dateStr    日期字符串 * @param src        日期源格式 * @param dest       日期转后后的目标格式 * @return *      转换格式后的日期字符串 * @throws ParseException 如果格式转换失败,则抛出异常 */public static String changeDateStrFormate(String dateStr, String src,String dest) throws ParseException{SimpleDateFormat sdf = new SimpleDateFormat(src);Date date = sdf.parse(dateStr);sdf = new SimpleDateFormat(dest);return sdf.format(date);}    /** * 将字符串转换为Date类型 * @param dateStr    日期字符串 * @param pattern    格式 * @return     Date对象 * @throws ParseException    当进行格式化的时候失败,抛出该异常。 */public static Date getDateByString(String dateStr, String pattern) throws ParseException{SimpleDateFormat sdf = new SimpleDateFormat(pattern);return sdf.parse(dateStr);}/** * 将Date类型转换为String类型 * @param date       日期 * @param pattern    格式 * @return    日期对应格式的字符串 * @throws ParseException * 当格式转换出现异常,抛出 */public static String getStringByDate(Date date, String pattern) throws ParseException    {SimpleDateFormat sdf = new SimpleDateFormat(pattern);return sdf.format(date);}    /**     * 判断两个日期是否为同年同月     *      * @param date1 date1     * @param date2 date2     * @return boolean     * @see [类、类#方法、类#成员]     */    public static boolean isSameYYYYMM(Date date1, Date date2)    {        Calendar c1 = Calendar.getInstance();        c1.setTime(date1);                Calendar c2 = Calendar.getInstance();        c2.setTime(date2);                return (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)) && (c1.get(Calendar.MONTH) == c2.get(Calendar.MONTH));    }    /**     * 返回当前是本年度的第几周     *      * @param date     * @return int [返回类型说明]     */    public static int getWeekNumOfYear(Date date)    {        Calendar c = Calendar.getInstance();        c.setTime(date);        c.setFirstDayOfWeek(Calendar.MONDAY);        return c.get(Calendar.WEEK_OF_YEAR);    }    /**     * date转timestamp类型     */    public static Timestamp convertDate2TStamp(Date date)    {        if (null == date)        {            return null;        }        return new Timestamp(date.getTime());    }    /**     * 以分钟为单位对时间进行调整     *      * @param time 要调整的时间     * @param minite 增加的分钟数     *      * @return String 调整后的时间     */    public static String addMinute(String time, int minite)    {        if (StringUtils.isEmpty(time))        {            return "";        }        Calendar calendar = Calendar.getInstance();        DateFormat dateFormat = new SimpleDateFormat(FORMAT_STANDARD);        Date date = null;        try        {            date = dateFormat.parse(time);        }        catch (ParseException e)        {            return "";        }        calendar.setTimeInMillis(date.getTime());        calendar.add(Calendar.MINUTE, minite);        return dateFormat.format(calendar.getTime());    }    /**     * 以分钟为单位对时间进行调整     *      * @param time 要调整的时间     * @param minite 增加的分钟数     *      * @return String 调整后的时间     */    public static Date addMinute(Date requestTime, int minite)    {        if (null == requestTime)        {            return null;        }        Calendar calendar = Calendar.getInstance();        calendar.setTimeInMillis(requestTime.getTime());        calendar.add(Calendar.MINUTE, minite);        return calendar.getTime();    }    /**     * 获取几天前的日期     *      * @param days     * @return [参数说明]     *      * @return Date [返回类型说明]     * @exception throws [违例类型] [违例说明]     * @see [类、类#方法、类#成员]     */    public static Date getBeforeDateInDay(int days)    {        Calendar calendar = Calendar.getInstance();        calendar.add(Calendar.DATE, -days);        return calendar.getTime();    }    /**     * yyyy-MM-ddTHH:mm:ss.SSSzzzzz格式字符串转换成日期类型     *      * @param s 要转换的字符串     * @param errorMessage 转换失败时的信息     * @return 转换后的日期     */    public static Date xmlDateTimeStr2XMLDateTime(String s, String errorMessage)    {        if ((s == null) || "".equals(s.trim()))        {            return null;        }        else        {            try            {                XMLGregorianCalendar calendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(s);                return calendar.toGregorianCalendar().getTime();            }            catch (Exception e)            {                return null;            }        }    }        /**     * 日期类型转换成yyyy-MM-ddTHH:mm:ss.SSSzzzzz格式字符串     *      * @param date Date日期     * @param errorMessage 转换失败时的信息     * @return String型字符串     */    public static String xmlDateTime2xmlDateTimeStr(Date date, String errorMessage)    {        if (date == null)        {            return errorMessage;        }        else        {            Calendar ca = Calendar.getInstance();            ca.setTime(date);            XMLGregorianCalendar calendar = null;            try            {                calendar = DatatypeFactory.newInstance().newXMLGregorianCalendar((GregorianCalendar)ca);            }            catch (Exception e)            {                return errorMessage;            }            return calendar.toString();        }            }    /**     * 得到当前格林威治的日期和时间     *      * @return String     */    public static String getUTCDateTime()    {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        TimeZone tz = TimeZone.getTimeZone("Etc/UTC");        sdf.setTimeZone(tz);        Calendar calendar = Calendar.getInstance();        return sdf.format(calendar.getTime());    }    /** *  * @param date * @param date2 * @return date2-date的天数 */public static long getDaysInterval(Date date, Date date2) {return (date2.getTime() - date.getTime()) / 86400000;}public static java.sql.Timestamp getTimestamp(){return java.sql.Timestamp.valueOf(getNowDateTime());}/** * @param days * @return 和当前相差days天的日期 */public static String getDate(int days) {Date date = new Date();date.setTime(date.getTime() + 86400000L * days);return date2string(date);}/** *  * @param date * @return date对应的年 */public static int getYear(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return calendar.get(Calendar.YEAR);}public static int getNowYear() {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());return calendar.get(Calendar.YEAR);}/** *  * @param date * @return date对应的月 */public static int getMonth(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return calendar.get(Calendar.MONTH) + 1;}public static int getNowMonth() {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());return calendar.get(Calendar.MONTH) + 1;}/** *  * @param date * @return 对应的天 */public static int getDay(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return calendar.get(Calendar.DAY_OF_MONTH);}public static int getNowDay() {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());return calendar.get(Calendar.DAY_OF_MONTH);}/** * 根据日期算年龄 * @param Date 出生日期 */public static int yearOLD(Date birthDay){Calendar sysCalendar=Calendar.getInstance();Calendar birCalendar=Calendar.getInstance();birCalendar.setTime(birthDay);if(sysCalendar.get(Calendar.MONTH)>birCalendar.get(Calendar.MONTH))return sysCalendar.get(Calendar.YEAR)-birCalendar.get(Calendar.YEAR)+1;elsereturn sysCalendar.get(Calendar.YEAR)-birCalendar.get(Calendar.YEAR);}    /** * 格式化今日中文短日期 *  * @return */public static final String formatChineseShortToday() {            SimpleDateFormat sdf = new SimpleDateFormat(CHINESE_SHORT_DATE);return sdf.format(new Date());}    /** * 得到中文星期 *  * @return */public static final String getChineseWeekDay(Date date) {Calendar c = Calendar.getInstance();c.setTime(date);return weekDays[c.get(Calendar.DAY_OF_WEEK)];}/** * 日期天数增加 *  * @param date * @param days * @return */public static Date addDays(Date date, int days) {if (checkPara(date)) {return null;}if (0 == days) {return date;}Locale loc = Locale.getDefault();Calendar cal = new GregorianCalendar(loc);cal.setTime(date);cal.add(Calendar.DAY_OF_MONTH, days);return cal.getTime();}/** * 日期天数减少 *  * @param date * @param days * @return */public static Date minusDays(Date date, int days) {return addDays(date, (0 - days));}/** * 按时间格式相加 *  * @param dateStr *            原来的时间 * @param pattern *            时间格式 * @param type *            "year"年、"month"月、"day"日、"week"周、 "hour"时、"minute"分、"second"秒 *            通过常量来设置,e.g.DateFormatUtil.YEAR * @param count *            相加数量 * @return */public static String addDate(String dateStr, String pattern, String type,int count) {if (checkPara(dateStr) || checkPara(pattern) || checkPara(type)) {return "";}if (0 == count) {return dateStr;}Date date = parseStrToCustomPatternDate(dateStr, pattern);Locale loc = Locale.getDefault();Calendar cal = new GregorianCalendar(loc);cal.setTime(date);if (DateFormatUtil.YEAR.equals(type)) {cal.add(Calendar.YEAR, count);} else if (DateFormatUtil.MONTH.equals(type)) {cal.add(Calendar.MONTH, count);} else if (DateFormatUtil.DAY.equals(type)) {cal.add(Calendar.DAY_OF_MONTH, count);} else if (DateFormatUtil.WEEK.equals(type)) {cal.add(Calendar.WEEK_OF_MONTH, count);} else if (DateFormatUtil.HOUR.equals(type)) {cal.add(Calendar.HOUR, count);} else if (DateFormatUtil.MINUTE.equals(type)) {cal.add(Calendar.MINUTE, count);} else if (DateFormatUtil.SECOND.equals(type)) {cal.add(Calendar.SECOND, count);} else {return "";}return formatDate(cal.getTime(), pattern);}/** * 那时间格式相减 *  * @param dateStr * @param pattern * @param type * @param count * @return */public static String minusDate(String dateStr, String pattern, String type,int count) {return addDate(dateStr, pattern, type, (0 - count));}/** * 日期大小比较 *  * @param dateStr1 * @param dateStr2 * @param pattern * @return */public static int compareDate(String dateStr1, String dateStr2,String pattern) {if (checkPara(dateStr1) || checkPara(dateStr2) || checkPara(pattern)) {return 888;}Date date1 = DateFormatUtil.parseStrToCustomPatternDate(dateStr1,pattern);Date date2 = DateFormatUtil.parseStrToCustomPatternDate(dateStr2,pattern);return date1.compareTo(date2);}/** * 获得这个月的第一天 *  * @param dateStr * @return */public static String getFirstDayInMonth(String dateStr) {if (checkPara(dateStr)) {return "";}Calendar cal = DateFormatUtil.parseStrToCalendar(dateStr);int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);cal.set(Calendar.DAY_OF_MONTH, firstDay);return DateFormatUtil.formatDate(cal.getTime(),DateFormatUtil.DATE_FORMAT);}/** * 判断是不是当月的第一天 * @param dateStr * @return */public static boolean isFirstDayInMonth(String dateStr){if (checkPara(dateStr)) {return false;}Calendar cal = DateFormatUtil.parseStrToCalendar(dateStr);int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);cal.set(Calendar.DAY_OF_MONTH, firstDay);String day = DateFormatUtil.formatDate(cal.getTime(),DateFormatUtil.DATE_FORMAT);if (dateStr.equals(day)) {return true;}return false;}/** * 判断是不是当月的最后一天 * @param dateStr * @return */public static boolean islastDayInMonth(String dateStr){if (checkPara(dateStr)) {return false;}Calendar cal = DateFormatUtil.parseStrToCalendar(dateStr);int firstDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);cal.set(Calendar.DAY_OF_MONTH, firstDay);String day = DateFormatUtil.formatDate(cal.getTime(), DateFormatUtil.DATE_FORMAT);if (dateStr.equals(day)) {return true;}return false;}/** * 获得这个月的最后一天 *  * @param dateStr * @return */public static String getLastDayInMonth(String dateStr) {if (checkPara(dateStr)) {return "";}Calendar cal = DateFormatUtil.parseStrToCalendar(dateStr);int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);cal.set(Calendar.DAY_OF_MONTH, lastDay);return DateFormatUtil.formatDate(cal.getTime(),DateFormatUtil.DATE_FORMAT);}/** * 获得这周的第一天 *  * @param dateStr * @return */public static String getFirstDayInWeek(String dateStr) {if (checkPara(dateStr)) {return "";}Calendar cal = DateFormatUtil.parseStrToCalendar(dateStr);int firstDay = cal.getActualMinimum(Calendar.DAY_OF_WEEK);cal.set(Calendar.DAY_OF_WEEK, firstDay);return DateFormatUtil.formatDate(cal.getTime(),DateFormatUtil.DATE_FORMAT);}/** * 获得这周的最后一天 *  * @param dateStr * @return */public static String getLastDayInWeek(String dateStr) {if (checkPara(dateStr)) {return "";}Calendar cal = DateFormatUtil.parseStrToCalendar(dateStr);int lastDay = cal.getActualMaximum(Calendar.DAY_OF_WEEK);cal.set(Calendar.DAY_OF_WEEK, lastDay);return DateFormatUtil.formatDate(cal.getTime(),DateFormatUtil.DATE_FORMAT);}/** * 获取指定日期的周的第一天 * @param dateStr * @return * @throws Exception  */public static String firstDay(String dateStr) throws Exception{if (dateStr == null) {return null;}Calendar cal = Calendar.getInstance();SimpleDateFormat sf = new SimpleDateFormat(DATE_FORMAT);Date date = convertStringToDate(dateStr);cal.setTime(date);int day_of_week = cal.get(Calendar.DAY_OF_WEEK) - 2;cal.add(Calendar.DATE, -day_of_week);return sf.format(cal.getTime());}/** * 获取指定日期的周的最后一天 *  */public static String lastDay(String dateStr)throws Exception{if (dateStr==null) {return null;}Calendar cal = Calendar.getInstance();SimpleDateFormat sf = new SimpleDateFormat(DATE_FORMAT);cal.setTime(convertStringToDate(dateStr));cal.add(Calendar.DATE, 6);return sf.format(cal.getTime());}public static String firstMonth(String dateStr)throws Exception{if (dateStr==null) {return null;}Calendar cal = Calendar.getInstance();SimpleDateFormat sf = new SimpleDateFormat(DATE_FORMAT);cal.setTime(convertStringToDate(dateStr));cal.set(GregorianCalendar.DAY_OF_MONTH, 1);return sf.format(cal.getTime());}/** * 获取本月第最后一天 * @param dateStr * @return * @throws Exception */public static String lastMonth(String dateStr) throws Exception{if (dateStr==null) {return null;}Calendar cal = Calendar.getInstance();SimpleDateFormat sf = new SimpleDateFormat(DATE_FORMAT);cal.setTime(convertStringToDate(dateStr));cal.set( Calendar.DATE, 1 );        cal.roll(Calendar.DATE, - 1 );return sf.format(cal.getTime());}/** * 获取当前月份所在季度 * @param dateStr * @return * @throws Exception */public static Map<String,String> getSeason(String dateStr) throws Exception{if (dateStr==null) {return null;}Map<String,String> map = new HashMap<String,String>();String array[][] = {{"01","03"},{"04","06"},{"07","09"},{"10","12"}};SimpleDateFormat month = new SimpleDateFormat("MM");SimpleDateFormat year = new SimpleDateFormat("yyyy");Date date = convertStringToDate(dateStr);int season=Integer.valueOf (month.format(date));String years = year.format(date);String beginSeason = null;String endSeason = null;if (season>=1&&season<=3) {beginSeason = array[0][0];endSeason = array[0][1];}if (season>=4&&season<=6) {beginSeason = array[1][0];endSeason = array[1][1];}if (season>=7&&season<=9) {beginSeason = array[2][0];endSeason = array[2][1];}if (season>=10&&season<=12) {beginSeason = array[3][0];endSeason = array[3][1];}map.put("beginSeason", years+"-"+beginSeason);map.put("endSeason", years+"-"+endSeason);return map;}    /** * 比较两个日期相差的天数 *  * @param fDate * @param oDate * @return */public static int getIntervalDays(Date fDate, Date oDate) {if (null == fDate || null == oDate) {return -1;}long intervalMilli = oDate.getTime() - fDate.getTime();return (int) (intervalMilli / (24 * 60 * 60 * 1000));}    /** * 比较2个时间相差的分钟数 *  * @param fDate * @param oDate * @return */public static int getIntervalMinutes(Date fDate, Date oDate) {if (null == fDate || null == oDate) {return -1;}long intervalMilli = oDate.getTime() - fDate.getTime();return (int) (intervalMilli / (60 * 1000));}}


 

原创粉丝点击