package com.ruoyi.authorize.common; 
 | 
  
 | 
import org.apache.commons.lang3.time.DateUtils; 
 | 
  
 | 
import java.text.*; 
 | 
import java.util.Calendar; 
 | 
import java.util.Date; 
 | 
  
 | 
  
 | 
/** 
 | 
 * 日期时间工具类 
 | 
 * @author wq 
 | 
 * @version 1.0 
 | 
 */ 
 | 
public class DateTimeUtil extends DateUtils 
 | 
{ 
 | 
    // 以毫秒表示的时间 
 | 
    private static final long DAY_IN_MILLIS = 24 * 3600 * 1000; 
 | 
    private static final long HOUR_IN_MILLIS = 3600 * 1000; 
 | 
    private static final long MINUTE_IN_MILLIS = 60 * 1000; 
 | 
    private static final long SECOND_IN_MILLIS = 1000; 
 | 
     
 | 
    private static String week[] = { 
 | 
        "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" 
 | 
    }; 
 | 
     
 | 
    /** 
 | 
     * 用指定参数抽取时间日期部分 
 | 
     * <br/>例如getDateSplit(System.currentTimeMillis()),"y") 为取得当前的年份 
 | 
     * @param date java.util.Date类型时间 
 | 
     * @param interval 可选值: 
 | 
     * <br/>y:年<br/>M:月<br/>d/dm:日<br/>dy:参数日期所代表的时间的已过的天数 
 | 
     * <br/>h:12制小时<br/>H:24制小时<br/>m:分 
 | 
     * <br/>s:秒<br/>S:毫秒<br/>w:星期 
 | 
     * <br/>wim:参数日期所代表的月已经过的星期数 
 | 
     * <br/>wm:参数日期所代表的月的星期数 
 | 
     * <br/>wy:参数日期所代表的年的第几周  
 | 
     * @return 格式化好的时间 
 | 
     */ 
 | 
    public static int getDateExtract(Date date, String interval) 
 | 
    { 
 | 
        Calendar c = Calendar.getInstance(); 
 | 
        c.setTime(date); 
 | 
        if (interval.equalsIgnoreCase("y")) 
 | 
            return c.get(Calendar.YEAR); 
 | 
        if (interval.equals("M")) 
 | 
            return c.get(Calendar.MONTH); 
 | 
        if (interval.equalsIgnoreCase("d")) 
 | 
            return c.get(Calendar.DATE); 
 | 
        if (interval.equalsIgnoreCase("dm")) 
 | 
            return c.get(Calendar.DAY_OF_MONTH); 
 | 
        if (interval.equalsIgnoreCase("dy")) 
 | 
            return c.get(Calendar.DAY_OF_YEAR); 
 | 
        if (interval.equals("h")) 
 | 
            return c.get(Calendar.HOUR); 
 | 
        if (interval.equals("H")) 
 | 
            return c.get(Calendar.HOUR_OF_DAY); 
 | 
        if (interval.equals("m")) 
 | 
            return c.get(Calendar.MINUTE); 
 | 
        if (interval.equals("s")) 
 | 
            return c.get(Calendar.SECOND); 
 | 
        if (interval.equals("S")) 
 | 
            return c.get(Calendar.MILLISECOND); 
 | 
        if (interval.equalsIgnoreCase("w")) 
 | 
            return c.get(Calendar.DAY_OF_WEEK); 
 | 
        if (interval.equalsIgnoreCase("wim")) 
 | 
            return c.get(Calendar.DAY_OF_WEEK_IN_MONTH); 
 | 
        if (interval.equalsIgnoreCase("wm")) 
 | 
            return c.get(Calendar.WEEK_OF_MONTH); 
 | 
        if (interval.equalsIgnoreCase("wy")) 
 | 
            return c.get(Calendar.WEEK_OF_YEAR); 
 | 
        else 
 | 
            return -1; 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * 用指定参数抽取时间日期部分 
 | 
     * @param dateStr String类型日期时间 
 | 
     * @param format 日期时间格式 
 | 
     * @param interval 可选值: 
 | 
     * <br/>y:年<br/>M:月<br/>d/dm:日<br/>dy:参数日期所代表的时间的已过的天数 
 | 
     * <br/>h:12制小时<br/>H:24制小时<br/>m:分 
 | 
     * <br/>s:秒<br/>S:毫秒<br/>w:星期 
 | 
     * <br/>wim:参数日期所代表的月已经过的星期数 
 | 
     * <br/>wm:参数日期所代表的月的星期数 
 | 
     * <br/>wy:参数日期所代表的年的第几周  
 | 
     * @return 格式化好的时间 
 | 
     * @throws ParseException 
 | 
     */ 
 | 
    public static int getDateExtract(String dateStr, String format, String interval) 
 | 
        throws ParseException 
 | 
    { 
 | 
        SimpleDateFormat sformat = new SimpleDateFormat(format); 
 | 
        Date date = sformat.parse(dateStr); 
 | 
        return getDateExtract(date, interval); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * @param value 时间 
 | 
     * @return yyyy-MM-dd HH:mm:ss格式的时间字符串 
 | 
     */ 
 | 
    public static String getSpecifyDateTime(long value) 
 | 
    { 
 | 
        return getFormatDateTime(new Date(value), "yyyy-MM-dd HH:mm:ss"); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 转换一个Long型到Date类型 
 | 
     * @param value 时间 
 | 
     * @return java.util.Date 
 | 
     */ 
 | 
    public static Date getDateTime(long value) 
 | 
    { 
 | 
        Calendar c = Calendar.getInstance(); 
 | 
        c.setTimeInMillis(value); 
 | 
        return c.getTime(); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * 取得当前星期 
 | 
     * @return 字符串 
 | 
     */ 
 | 
    public static String getCurrentWeek() 
 | 
    { 
 | 
        return week[getDateExtract(new Date(), "w") - 1]; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 从给出的时间计算星期 
 | 
     * @param date 日期 
 | 
     * @return 字符串 
 | 
     */ 
 | 
    public static String getWeek(Date date) 
 | 
    { 
 | 
        return week[getDateExtract(date, "w") - 1]; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 从给出的时间计算星期 
 | 
     * @param dateStr 日期字符串 
 | 
     * @param format 日期格式 
 | 
     * @return 字符串 
 | 
     */ 
 | 
    public static String getWeek(String dateStr, String format) 
 | 
        throws ParseException 
 | 
    { 
 | 
        return week[getDateExtract(dateStr, format, "w") - 1]; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 用指定格式,格式一个日期 
 | 
     * @param date 
 | 
     * @param format 
 | 
     * @return 字符串 
 | 
     */ 
 | 
    public static String getFormatDateTime(Date date, String format) 
 | 
    { 
 | 
        return (new SimpleDateFormat(format)).format(date); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * string类型时间转为java.util.Date类型时间 yyyy-MM-dd 无时分秒 
 | 
     * @param strDate 
 | 
     * @return 
 | 
     * @throws ParseException 
 | 
     */ 
 | 
    public static Date changeStringToDate(String strDate) 
 | 
        throws ParseException 
 | 
    { 
 | 
        if (strDate == null || strDate.equals("")) 
 | 
            return null; 
 | 
        else 
 | 
            return DateFormat.getDateInstance(DateFormat.DEFAULT).parse(strDate); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 去得紧凑型日期 例如yyyyMMdd 
 | 
     * @param data 型如yyyy-MM-dd 
 | 
     * @return 字符串 
 | 
     */ 
 | 
    public static String getCompactDate(String data) 
 | 
    { 
 | 
        if (data == null || data.length() < 10) 
 | 
        { 
 | 
            return ""; 
 | 
        } else 
 | 
        { 
 | 
            data = (new StringBuilder(String.valueOf(data.substring(0, 4)))).append(data.substring(5, 7)).append(data.substring(8, 10)).toString(); 
 | 
            return data; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 得到Long型时间从给定yyyy-MM-dd HH:mm:ss型字符串 
 | 
     * @param strDate 
 | 
     * @return Long型时间 
 | 
     * @throws ParseException 
 | 
     */ 
 | 
    public static long getLongDate(String strDate) throws ParseException 
 | 
    { 
 | 
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
        Date date = format.parse(strDate); 
 | 
        Calendar c = Calendar.getInstance(); 
 | 
        c.setTime(date); 
 | 
        Long l = c.getTimeInMillis(); 
 | 
        return l; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 格式化Long类型时间 
 | 
     * @param longDate Long类型时间 
 | 
     * @param format 时间格式 
 | 
     * @return java.util.Date 
 | 
     * @throws ParseException 
 | 
     */ 
 | 
    public static Date getFormatDate(long longDate, String format) throws ParseException 
 | 
    { 
 | 
        DateFormat dformat = new SimpleDateFormat(format); 
 | 
        Calendar c = Calendar.getInstance(); 
 | 
        c.setTimeInMillis(longDate); 
 | 
        String dt = dformat.format(c.getTime()); 
 | 
        return dformat.parse(dt); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 格式化String类型时间 
 | 
     * @param strDate String类型时间 
 | 
     * @param format 时间格式 
 | 
     * @return java.util.Date 
 | 
     * @throws ParseException 
 | 
     */ 
 | 
    public static Date getFormatDate(String strDate, String format) throws ParseException 
 | 
    { 
 | 
        DateFormat dformat = new SimpleDateFormat(format); 
 | 
        return dformat.parse(strDate); 
 | 
    } 
 | 
    /** 
 | 
     *将字符串格式yyyyMMdd的字符串转为日期,格式"yyyy-MM-dd" 
 | 
     * 
 | 
     * @param date 日期字符串 
 | 
     * @return 返回格式化的日期 
 | 
     * @throws ParseException 分析时意外地出现了错误异常 
 | 
     */ 
 | 
    public static String strToDateFormat(String date) throws ParseException { 
 | 
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); 
 | 
        formatter.setLenient(false); 
 | 
        Date newDate= formatter.parse(date); 
 | 
        formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
 | 
        return formatter.format(newDate); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 格式化Date类型时间 
 | 
     * @param date Date类型时间 
 | 
     * @param format 时间格式 
 | 
     * @return java.util.Date 
 | 
     * @throws ParseException 
 | 
     */ 
 | 
    public static Date getFormatDate(Date date, String format) throws ParseException 
 | 
    { 
 | 
        DateFormat dformat = new SimpleDateFormat(format); 
 | 
        String dt = dformat.format(date); 
 | 
        return dformat.parse(dt); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 用指定格式格式化当前时间 
 | 
     *  
 | 
     * @param format 
 | 
     *  <br/>时间格式 例yyyy-MM-dd HH:mm:ss  
 | 
     *  <br/>"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT  
 | 
     *  <br/>"EEE, MMM d, ''yy" 星期五, 三月 9, '12 
 | 
     *  <br/>"h:mm a" 12:08 PM  
 | 
     *  <br/>GGG hh:mm aaa" 02001.July.04 AD 12:08 PM  
 | 
     *  <br/>"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700  
 | 
     *  <br/>"yyMMddHHmmssZ" 010704120856-0700  
 | 
     *  <br/>"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700 
 | 
     * @return 格式化的时间 
 | 
     */ 
 | 
    public static String getCurrentDate(String format) 
 | 
    { 
 | 
        return getFormatDateTime(new Date(), format); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * 反回一个Long型的当前时间 
 | 
     * @return <Long> 当前时间 
 | 
     */ 
 | 
    public static Long getCurrentLongDate(){ 
 | 
        return new Date().getTime(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 取得yyyy-MM-dd格式的当前时间 
 | 
     * @return 格式化的时间 
 | 
     */ 
 | 
    public static String getCurrentDate() 
 | 
    { 
 | 
        return getCurrentDate("yyyy-MM-dd"); 
 | 
    } 
 | 
     
 | 
    // //////////////////////////////////////////////////////////////////////////// 
 | 
    // dateDiff 
 | 
    // 计算两个日期之间的差值 
 | 
    // //////////////////////////////////////////////////////////////////////////// 
 | 
  
 | 
    /** 
 | 
     * 计算两个时间之间的差值,根据标志的不同而不同 
 | 
     *  
 | 
     * @param flag 
 | 
     *            计算标志,表示按照年/月/日/时/分/秒等计算 
 | 
     * @param calSrc 
 | 
     *            减数 
 | 
     * @param calDes 
 | 
     *            被减数 
 | 
     * @return 两个日期之间的差值 
 | 
     */ 
 | 
    public static int dateDiff(char flag, Calendar calSrc, Calendar calDes) { 
 | 
  
 | 
        long millisDiff = calSrc.getTime().getTime() - calDes.getTime().getTime(); 
 | 
  
 | 
        if (flag == 'y') { 
 | 
            return (calSrc.get(calSrc.YEAR) - calDes.get(calDes.YEAR)); 
 | 
        } 
 | 
  
 | 
        if (flag == 'd') { 
 | 
            return (int) (millisDiff / DAY_IN_MILLIS); 
 | 
        } 
 | 
  
 | 
        if (flag == 'h') { 
 | 
            return (int) (millisDiff / HOUR_IN_MILLIS); 
 | 
        } 
 | 
  
 | 
        if (flag == 'm') { 
 | 
            return (int) (millisDiff / MINUTE_IN_MILLIS); 
 | 
        } 
 | 
  
 | 
        if (flag == 's') { 
 | 
            return (int) (millisDiff / SECOND_IN_MILLIS); 
 | 
        } 
 | 
  
 | 
        return 0; 
 | 
    } 
 | 
    /** 
 | 
     * 传入时间加上或减去指定的时间间隔 
 | 
     * @param date 
 | 
     * @param interval 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date addDay(Date date, int interval) { 
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        cal.setTime(date); 
 | 
        cal.add(Calendar.DAY_OF_MONTH, interval); 
 | 
        return cal.getTime(); 
 | 
    } 
 | 
    /** 
 | 
     * 传入时间 加上或减去 小时 
 | 
     * @param date 
 | 
     * @param interval 
 | 
     * @return 
 | 
     */ 
 | 
    public static Date addHour(Date date, int interval){ 
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        cal.setTime(date); 
 | 
        cal.add(Calendar.HOUR_OF_DAY, interval); 
 | 
        return cal.getTime(); 
 | 
    } 
 | 
    /* 
 | 
     * 传入时间 加上或减去 分钟 
 | 
     */ 
 | 
    public static Date addMinute(Date date, int interval){ 
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        cal.setTime(date); 
 | 
        cal.add(Calendar.MINUTE, interval); 
 | 
        return cal.getTime(); 
 | 
    } 
 | 
    /* 
 | 
     * 传入时间 加上或减去 秒 
 | 
     */ 
 | 
    public static Date addSecond(Date date, int interval){ 
 | 
        Calendar cal = Calendar.getInstance(); 
 | 
        cal.setTime(date); 
 | 
        cal.add(Calendar.SECOND, interval); 
 | 
        return cal.getTime(); 
 | 
    } 
 | 
  
 | 
//    public static void main(String args[]) throws ParseException 
 | 
//    { 
 | 
//        System.out.println(getFormatDateTime(addDay(new Date(),-3), "yyyy-MM-dd HH:mm:ss")); 
 | 
//    } 
 | 
} 
 |