package com.matrix.core.tools; 
 | 
  
 | 
  
 | 
import java.sql.Timestamp; 
 | 
import java.text.DateFormat; 
 | 
import java.text.ParseException; 
 | 
import java.text.SimpleDateFormat; 
 | 
import java.time.LocalDateTime; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Calendar; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 日期格式化,转换工具类 
 | 
 * 
 | 
 * @author Ron 
 | 
 * @createTime 2014.08.30 
 | 
 */ 
 | 
public class DateUtil { 
 | 
    private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, 
 | 
            23, 23, 24, 23, 22 }; 
 | 
    private final static String[] constellationArr = new String[] { "摩羯座", 
 | 
            "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", 
 | 
            "天蝎座", "射手座", "摩羯座" }; 
 | 
  
 | 
    public static final String DATE_FORMAT_STS = "yyyy-MM-dd'T'HH:mm:ss"; 
 | 
  
 | 
    public static final String DATE_FORMAT_ST = "yyyy-MM-dd'T'HH:mm"; 
 | 
  
 | 
    public static final String HH_mm = "HH:mm"; 
 | 
  
 | 
    public static final String HHmm = "HHmm"; 
 | 
  
 | 
    public static final String MONTH = "yyyy-MM"; 
 | 
  
 | 
    public static final String DATE_FORMAT_SS = "yyyy-MM-dd HH:mm:ss"; 
 | 
  
 | 
    public static final String DATE_FORMAT_MONGO = "yyyy-MM-dd'T'HH:mm:ss.SSS"; 
 | 
  
 | 
  
 | 
  
 | 
    public static final String DATE_FORMAT_MM = "yyyy-MM-dd HH:mm"; 
 | 
  
 | 
    public static final String DATE_FORMAT_HH = "yyyy-MM-dd HH"; 
 | 
  
 | 
  
 | 
    public static final String DATE_FORMAT_DD = "yyyy-MM-dd"; 
 | 
  
 | 
    public static final String DATE_FORMAT_SPLITE_DD = "yyyy.MM.dd"; 
 | 
  
 | 
    public static final String DATE_FORMAT_NO_SPLITE_DD = "yyyyMMdd"; 
 | 
  
 | 
    public static final String DATE_FORMAT_MM_NO_DD = "yyyyMM"; 
 | 
  
 | 
    public static final String DATE_FORMAT_NO_SPLITE_MM = "yyyyMMddHHmm"; 
 | 
  
 | 
    public static final String DATE_FORMAT_NO_SPLITE_MM_HH = "yyyyMMddHH"; 
 | 
  
 | 
    public static final String YEAR = "yyyy"; 
 | 
  
 | 
    public static final String DATE_FORMAT_MMDD = "M月d日"; 
 | 
  
 | 
    public static final String DATE_FORMAT_WEEK = "周"; 
 | 
  
 | 
    public static final String DATE_TIME_MORNING = "早上"; 
 | 
  
 | 
    public static final String DATE_TIME_AFTERNOON = "下午"; 
 | 
  
 | 
    public static final String DATE_TIME_NIGHT = "晚上"; 
 | 
  
 | 
    public static final String CENTRE_SCRIBING = "-"; 
 | 
  
 | 
    public static final String MINUTE = "MINUTE"; 
 | 
  
 | 
    protected static final String EMPTY = ""; 
 | 
  
 | 
    protected static final String ZERO = "0"; 
 | 
  
 | 
    protected static final String SPLITE_CHAR = ":"; 
 | 
    // 空格不能删除 
 | 
    protected static final String START_TIME = " 00:00:00"; 
 | 
    // 空格不能删除 
 | 
    protected static final String END_TIME = " 23:59:59"; 
 | 
  
 | 
    protected static final int WEEK_DAYS = 7; 
 | 
  
 | 
    public static String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss"; 
 | 
  
 | 
    protected static final String[] WEEKS = { "一", "二", "三", "四", "五", "六", "日" }; 
 | 
  
 | 
    /** 
 | 
     * 返回年份 
 | 
     * 
 | 
     * @param date 
 | 
     *            日期 
 | 
     * @return 返回年份 
 | 
     */ 
 | 
    public static int getYear(Date date) { 
 | 
  
 | 
        try { 
 | 
            Calendar c = Calendar.getInstance(); 
 | 
            c.setTime(date); 
 | 
            return c.get(Calendar.YEAR); 
 | 
        } catch (Exception e) { 
 | 
        } 
 | 
  
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * Java通过生日计算星座 
 | 
     * 
 | 
     * @param month 
 | 
     * @param day 
 | 
     * @return 
 | 
     */ 
 | 
    public static String getConstellation(int month, int day) { 
 | 
        return day < dayArr[month - 1] ? constellationArr[month - 1] 
 | 
                : constellationArr[month]; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    /** 
 | 
     * 
 | 
     * @Title: getNextNMinute  获取date之后N分钟的时间 
 | 
     * @Description: TODO 
 | 
     * @author:罗凯 
 | 
     * @param date 
 | 
     * @return 
 | 
     * Date    返回类型 
 | 
     * @date 2016年8月3日 下午2:48:51 
 | 
     * @throws 
 | 
     */ 
 | 
    public static Date getNextNMinute(Date date,int n){ 
 | 
        return new Date(date.getTime()+(n*60*1000)); 
 | 
    } 
 | 
    /** 
 | 
     * 返回月份 
 | 
     * 
 | 
     * @param date 
 | 
     *            日期 
 | 
     * @return 返回月份 
 | 
     */ 
 | 
    public static int getMonth(Date date) { 
 | 
  
 | 
        try { 
 | 
            Calendar c = Calendar.getInstance(); 
 | 
            c.setTime(date); 
 | 
            return c.get(Calendar.MONTH) + 1; 
 | 
        } catch (Exception e) { 
 | 
  
 | 
        } 
 | 
        return 0; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 日期转字符串 
 | 
     * 
 | 
     * @param date 
 | 
     * @param format 
 | 
     * @return 
 | 
     */ 
 | 
    public static String dateToString(Date date, String format) { 
 | 
  
 | 
        if (date == null) { 
 | 
            return EMPTY; 
 | 
        } 
 | 
        DateFormat fmt = new SimpleDateFormat(format); 
 | 
        return fmt.format(date); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 字符串转日期 
 | 
     * 
 | 
     * @param dateStr 
 | 
     * @param format 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date stringToDate(String dateStr, String format) { 
 | 
  
 | 
        DateFormat fmt = new SimpleDateFormat(format); 
 | 
        try { 
 | 
            return fmt.parse(dateStr); 
 | 
        } catch (ParseException e) { 
 | 
  
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取一个编码 
 | 
     * 获取一个当前时间并且加入了四位的随机字母 
 | 
     * @return 
 | 
     */ 
 | 
    public static String getTimeCode() { 
 | 
        return dateToString(new Date(), "yyyyMMddssSSS")+StringUtils.getRandomString(4); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 判断给定的日期是一周中的第几天,注意:按照中国的习惯,周日是第七天 
 | 
     * 
 | 
     * @param date 
 | 
     * @return 
 | 
     */ 
 | 
    public static int dateToWeek(Date date) { 
 | 
  
 | 
        if (date == null) { 
 | 
            return 0; 
 | 
        } 
 | 
  
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        cal.setTime(date); 
 | 
        if (cal.get(Calendar.DAY_OF_WEEK) == 1) { 
 | 
            return 7; 
 | 
        } else { 
 | 
            return cal.get(Calendar.DAY_OF_WEEK) - 1; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static String dateOfWeek(Date date) { 
 | 
  
 | 
        return DATE_FORMAT_WEEK + WEEKS[dateToWeek(date) - 1]; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 指定时间的下一天 
 | 
     * 
 | 
     * @param date 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date nextDate(Date date) { 
 | 
  
 | 
        if (date == null) { 
 | 
            return date; 
 | 
        } 
 | 
  
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        try { 
 | 
            cal.setTime(date); 
 | 
            cal.add(Calendar.DATE, 1); 
 | 
            return cal.getTime(); 
 | 
        } catch (Exception e) { 
 | 
  
 | 
        } 
 | 
  
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 指定时间的前一天 
 | 
     * 
 | 
     * @param date 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date previousDate(Date date) { 
 | 
  
 | 
        if (date == null) { 
 | 
            return date; 
 | 
        } 
 | 
  
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        try { 
 | 
            cal.setTime(date); 
 | 
            cal.add(Calendar.DATE, -1); 
 | 
            return cal.getTime(); 
 | 
        } catch (Exception e) { 
 | 
  
 | 
        } 
 | 
  
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 指定时间的下N天 
 | 
     * 
 | 
     * @param date 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date nextNDate(Date date, int nDay) { 
 | 
  
 | 
        if (date == null) { 
 | 
            return date; 
 | 
        } 
 | 
  
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        try { 
 | 
            cal.setTime(date); 
 | 
            cal.add(Calendar.DATE, nDay); 
 | 
            return cal.getTime(); 
 | 
        } catch (Exception e) { 
 | 
  
 | 
        } 
 | 
  
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 指定时间的前N天 
 | 
     * 
 | 
     * @param date 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date previousNDate(Date date, int nDay) { 
 | 
  
 | 
        if (date == null) { 
 | 
            return date; 
 | 
        } 
 | 
  
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        try { 
 | 
            cal.setTime(date); 
 | 
            cal.add(Calendar.DATE, -nDay); 
 | 
            return cal.getTime(); 
 | 
        } catch (Exception e) { 
 | 
  
 | 
        } 
 | 
  
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取一天的起始时间 
 | 
     * 
 | 
     * @param date 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date getStartDate(Date date) { 
 | 
  
 | 
        if (date == null) { 
 | 
            return date; 
 | 
        } 
 | 
  
 | 
        DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_DD); 
 | 
        String dateStr = fmt.format(date); 
 | 
        dateStr = dateStr + START_TIME; 
 | 
        fmt = new SimpleDateFormat(DATE_FORMAT_SS); 
 | 
        try { 
 | 
            return fmt.parse(dateStr); 
 | 
        } catch (ParseException e) { 
 | 
  
 | 
        } 
 | 
  
 | 
        return date; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取一天的结束时间 
 | 
     * 
 | 
     * @param date 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date getEndDate(Date date) { 
 | 
  
 | 
        if (date == null) { 
 | 
            return date; 
 | 
        } 
 | 
  
 | 
        DateFormat fmt = new SimpleDateFormat(DATE_FORMAT_DD); 
 | 
        String dateStr = fmt.format(date); 
 | 
        dateStr = dateStr + END_TIME; 
 | 
        fmt = new SimpleDateFormat(DATE_FORMAT_SS); 
 | 
        try { 
 | 
            return fmt.parse(dateStr); 
 | 
        } catch (ParseException e) { 
 | 
  
 | 
        } 
 | 
  
 | 
        return date; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * currentDat是否在referenceDate日期之前 
 | 
     * 
 | 
     * @param referenceDate 
 | 
     * @param currentDat 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isBeforeDate(Date referenceDate, Date currentDate) { 
 | 
  
 | 
        if (currentDate == null) { 
 | 
            return false; 
 | 
        } 
 | 
        if (referenceDate == null) { 
 | 
            return true; 
 | 
        } 
 | 
        return currentDate.before(referenceDate); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * currentDat是否在referenceDate日期之后 
 | 
     * 
 | 
     * @param referenceDate 
 | 
     * @param currentDat 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isAffterDate(Date referenceDate, Date currentDate) { 
 | 
  
 | 
        if (currentDate == null) { 
 | 
            return false; 
 | 
        } 
 | 
        if (referenceDate == null) { 
 | 
            return true; 
 | 
        } 
 | 
        return currentDate.after(referenceDate); 
 | 
    } 
 | 
    public static long getDifTimeMin(Date beginTime,Date endTime){ 
 | 
        return (endTime.getTime()-beginTime.getTime())/1000/ 60; 
 | 
    } 
 | 
    public static List<Date> getFutureDay(Date date, int start,int end){ 
 | 
        List<Date> dates=new ArrayList<Date>(); 
 | 
        for (int i = 0; i < end-start; i++) { 
 | 
            dates.add(DateUtil.nextNDate(date,i)); 
 | 
        } 
 | 
        return dates; 
 | 
    } 
 | 
    /** 
 | 
     * 字符串转日期 如果转换失败就返回一个当前时间date 
 | 
     * 
 | 
     * @param dateStr 
 | 
     * @param format 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date stringToDateNew(String dateStr, String format) { 
 | 
  
 | 
        if (StringUtils.isBlank(dateStr) || StringUtils.isBlank(format)) { 
 | 
            return new Date(); 
 | 
        } 
 | 
        DateFormat fmt = new SimpleDateFormat(format); 
 | 
        try { 
 | 
            return fmt.parse(dateStr); 
 | 
        } catch (ParseException e) { 
 | 
  
 | 
        } 
 | 
        return new Date(); 
 | 
    } 
 | 
    /** 
 | 
     * 判断currentDate是否在startDate和endDate之间,不包括startDate和endDate 
 | 
     * 
 | 
     * @param startDate 
 | 
     * @param endDate 
 | 
     * @param currentDate 
 | 
     * @return 
 | 
     */ 
 | 
    public static boolean isDuringDate(Date startDate, Date endDate, Date currentDate) { 
 | 
  
 | 
        if (currentDate == null) { 
 | 
            return false; 
 | 
        } 
 | 
  
 | 
        if (isAffterDate(startDate, currentDate) && isBeforeDate(endDate, currentDate)) { 
 | 
            return true; 
 | 
        } 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取startDate到endDate之间的星期day(中文星期)不包括startDate和endDate 
 | 
     * 
 | 
     * @param startDate 
 | 
     * @param endDate 
 | 
     * @param day 
 | 
     * @return 
 | 
     */ 
 | 
    public static List<Date> findDayDuringDate(Date startDate, Date endDate, int day) { 
 | 
  
 | 
        List<Date> listDate = new ArrayList<Date>(); 
 | 
        int startDay = dateToWeek(startDate); 
 | 
  
 | 
        Date date = null; 
 | 
        if (startDay == day) { 
 | 
            date = nextNDate(startDate, WEEK_DAYS); 
 | 
        } else { 
 | 
            date = nextNDate(startDate, day - startDay); 
 | 
        } 
 | 
        while (isDuringDate(startDate, endDate, date)) { 
 | 
            listDate.add(date); 
 | 
            date = nextNDate(date, WEEK_DAYS); 
 | 
        } 
 | 
  
 | 
        return listDate; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    /** 
 | 
     * date转换成Timestamp 
 | 
     * 
 | 
     * @param date 
 | 
     * @param format 
 | 
     * @return 
 | 
     */ 
 | 
    public static Timestamp dateToTimestamp(Date date, String format) { 
 | 
  
 | 
        if (date == null) { 
 | 
            return null; 
 | 
        } 
 | 
  
 | 
        format = DATE_FORMAT_SS; 
 | 
  
 | 
        DateFormat fmt = new SimpleDateFormat(format); 
 | 
  
 | 
        return Timestamp.valueOf(fmt.format(date)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取早中晚 
 | 
     * 
 | 
     * @param time 
 | 
     * @return 
 | 
     */ 
 | 
    public static String getDateTime(int time) { 
 | 
  
 | 
        // 早上 
 | 
        if (time == 1) { 
 | 
            return DateUtil.DATE_TIME_MORNING; 
 | 
        } 
 | 
        // 下午 
 | 
        else if (time == 2) { 
 | 
            return DateUtil.DATE_TIME_AFTERNOON; 
 | 
        } 
 | 
        // 晚上 
 | 
        else if (time == 3) { 
 | 
            return DateUtil.DATE_TIME_NIGHT; 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取早中晚的开始时间 
 | 
     * 
 | 
     * @param date 
 | 
     * @param time 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date getMeetTimeStart(String date, int time) { 
 | 
  
 | 
        // 早上 
 | 
        if (time == 1) { 
 | 
            return DateUtil.stringToDate(date + " 06:00", DateUtil.DATE_FORMAT_MM); 
 | 
        } 
 | 
        // 下午 
 | 
        else if (time == 2) { 
 | 
            return DateUtil.stringToDate(date + " 13:00", DateUtil.DATE_FORMAT_MM); 
 | 
        } 
 | 
        // 晚上 
 | 
        else if (time == 3) { 
 | 
            return DateUtil.stringToDate(date + " 19:00", DateUtil.DATE_FORMAT_MM); 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取早中晚的结束时间 
 | 
     * 
 | 
     * @param date 
 | 
     * @param time 
 | 
     * @return 
 | 
     */ 
 | 
  
 | 
    public static Date getMeetTimeEnd(String date, int time) { 
 | 
        // 早上 
 | 
        if (time == 1) { 
 | 
            return DateUtil.stringToDate(date + " 13:00", DateUtil.DATE_FORMAT_MM); 
 | 
        } 
 | 
        // 下午 
 | 
        else if (time == 2) { 
 | 
            return DateUtil.stringToDate(date + " 19:00", DateUtil.DATE_FORMAT_MM); 
 | 
        } 
 | 
        // 晚上 
 | 
        else if (time == 3) { 
 | 
            return DateUtil.stringToDate(date + " 23:00", DateUtil.DATE_FORMAT_MM); 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 得到几天前的时间 
 | 
     * 
 | 
     * @param d 
 | 
     * @param day 
 | 
     * @return 
 | 
     */ 
 | 
    public static Timestamp getDateBefore(Date d, int day) { 
 | 
        Calendar now = Calendar.getInstance(); 
 | 
        now.setTime(d); 
 | 
        now.set(Calendar.DATE, now.get(Calendar.DATE) - day); 
 | 
        return new Timestamp(now.getTime().getTime()); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 得到几天后的时间 
 | 
     * 
 | 
     * @param d 
 | 
     * @param day 
 | 
     * @return 
 | 
     */ 
 | 
    public static Timestamp getDateAfter(Date d, int day) { 
 | 
        Calendar now = Calendar.getInstance(); 
 | 
        now.setTime(d); 
 | 
        now.set(Calendar.DATE, now.get(Calendar.DATE) + day); 
 | 
        return new Timestamp(now.getTime().getTime()); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 将日期类型格式化成字符串 
 | 
     * 
 | 
     * @param date 
 | 
     * @return 格式化后日期字符串 
 | 
     * @throws ParseException 
 | 
     */ 
 | 
    public static String dateFormatStr(Date date, String dateStyle) { 
 | 
        String dateStr = null; 
 | 
        if (date != null) { 
 | 
            SimpleDateFormat sdf = new SimpleDateFormat(dateStyle); 
 | 
            dateStr = sdf.format(date); 
 | 
        } 
 | 
        return dateStr; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取时间戳 
 | 
     * 
 | 
     * @return 
 | 
     */ 
 | 
    public static String getTimeMark() { 
 | 
        Calendar c = Calendar.getInstance(); 
 | 
        int year = c.get(Calendar.YEAR); 
 | 
        int mouth = c.get(Calendar.MONTH); 
 | 
        int day = c.get(Calendar.DAY_OF_MONTH); 
 | 
        int hour = c.get(Calendar.HOUR_OF_DAY); 
 | 
        int minute = c.get(Calendar.MINUTE); 
 | 
        int second = c.get(Calendar.SECOND); 
 | 
        int haomiao = c.get(Calendar.MILLISECOND); 
 | 
        return "" + year + mouth + day + hour + minute + second + haomiao; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取当前时间后的几年 
 | 
     * @param d 
 | 
     * @param year 
 | 
     * @return 
 | 
     */ 
 | 
    public static Timestamp getDateAfterYear(Date d, int year) { 
 | 
        Calendar now = Calendar.getInstance(); 
 | 
        now.setTime(d); 
 | 
        now.set(Calendar.YEAR, now.get(Calendar.YEAR) + year); 
 | 
        return new Timestamp(now.getTime().getTime()); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取当前时间后的几个月 
 | 
     * @param d 
 | 
     * @param month 
 | 
     * @return 
 | 
     */ 
 | 
    public static Timestamp getDateAfterMonth(Date d, int month) { 
 | 
        Calendar now = Calendar.getInstance(); 
 | 
        now.setTime(d); 
 | 
        now.set(Calendar.MONTH, now.get(Calendar.MONTH) + month); 
 | 
        return new Timestamp(now.getTime().getTime()); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取当前时间后的几个小时 
 | 
     * @param d 
 | 
     * @param hours 
 | 
     * @return 
 | 
     */ 
 | 
    public static Timestamp getDateAfterHours(Date d, int hours) { 
 | 
        Calendar now = Calendar.getInstance(); 
 | 
        now.setTime(d); 
 | 
        now.set(Calendar.HOUR_OF_DAY, now.get(Calendar.HOUR_OF_DAY) + hours); 
 | 
        return new Timestamp(now.getTime().getTime()); 
 | 
    } 
 | 
  
 | 
    public static Timestamp getDateAfterMinute(Date d, int minute) { 
 | 
        Calendar now = Calendar.getInstance(); 
 | 
        now.setTime(d); 
 | 
        now.set(Calendar.MINUTE, now.get(Calendar.MINUTE) + minute); 
 | 
        return new Timestamp(now.getTime().getTime()); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 计算2个时间直接的时间差 
 | 
     */ 
 | 
    public static long getTimeSpan(Date maxTime, Date startTime, String unit) { 
 | 
        long um= Math.abs(maxTime.getTime()-startTime.getTime()); 
 | 
        if(MINUTE.equals(unit)){ 
 | 
            um=um/(1000*60); 
 | 
        } 
 | 
        return um; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据单位计算目标日期 
 | 
     * 
 | 
     * @param num 距离 
 | 
     * @param unit 日期单位 Y/M/D 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date calDate(Integer num, String unit) { 
 | 
        Calendar calendar = Calendar.getInstance(); 
 | 
        Date targetDate = null; 
 | 
        switch (unit) { 
 | 
            case "Y": 
 | 
                calendar.add(Calendar.YEAR, num); 
 | 
                targetDate = calendar.getTime(); 
 | 
                break; 
 | 
            case "M": 
 | 
                calendar.add(Calendar.MONTH, num); 
 | 
                targetDate = calendar.getTime(); 
 | 
                break; 
 | 
            case "D": 
 | 
                calendar.add(Calendar.DAY_OF_MONTH, num); 
 | 
                targetDate = calendar.getTime(); 
 | 
                break; 
 | 
            default: 
 | 
                targetDate = stringToDate("9999-12-31", DATE_FORMAT_DD); 
 | 
  
 | 
        } 
 | 
  
 | 
        return targetDate; 
 | 
    } 
 | 
  
 | 
    public static String getAgeForBirthDay(Date birthDay) { 
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        if (birthDay == null) { 
 | 
            return "-"; 
 | 
        } 
 | 
        // 出生日期晚于当前时间,无法计算 
 | 
        if (cal.before(birthDay)) { 
 | 
            return "-"; 
 | 
        } 
 | 
        // 当前年份 
 | 
        int yearNow = cal.get(Calendar.YEAR); 
 | 
        // 当前月份 
 | 
        int monthNow = cal.get(Calendar.MONTH); 
 | 
        // 当前日期 
 | 
        int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); 
 | 
        cal.setTime(birthDay); 
 | 
        int yearBirth = cal.get(Calendar.YEAR); 
 | 
        int monthBirth = cal.get(Calendar.MONTH); 
 | 
        int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); 
 | 
        // 计算整岁数 
 | 
        Integer age = yearNow - yearBirth; 
 | 
        if (monthNow <= monthBirth) { 
 | 
            if (monthNow == monthBirth) { 
 | 
                if (dayOfMonthNow < dayOfMonthBirth) { 
 | 
                    // 当前日期在生日之前,年龄减一 
 | 
                    age--; 
 | 
                } 
 | 
            } else { 
 | 
                age--; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return age.toString(); 
 | 
    } 
 | 
} 
 |