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[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; /** * 用指定参数抽取时间日期部分 *
例如getDateSplit(System.currentTimeMillis()),"y") 为取得当前的年份 * @param date java.util.Date类型时间 * @param interval 可选值: *
y:年
M:月
d/dm:日
dy:参数日期所代表的时间的已过的天数 *
h:12制小时
H:24制小时
m:分 *
s:秒
S:毫秒
w:星期 *
wim:参数日期所代表的月已经过的星期数 *
wm:参数日期所代表的月的星期数 *
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 可选值: *
y:年
M:月
d/dm:日
dy:参数日期所代表的时间的已过的天数 *
h:12制小时
H:24制小时
m:分 *
s:秒
S:毫秒
w:星期 *
wim:参数日期所代表的月已经过的星期数 *
wm:参数日期所代表的月的星期数 *
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 *
时间格式 例yyyy-MM-dd HH:mm:ss *
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT *
"EEE, MMM d, ''yy" 星期五, 三月 9, '12 *
"h:mm a" 12:08 PM *
GGG hh:mm aaa" 02001.July.04 AD 12:08 PM *
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700 *
"yyMMddHHmmssZ" 010704120856-0700 *
"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 当前时间 */ 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")); // } }