| 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")); | 
| //    } | 
| } |