package com.ruoyi.common.utils; import org.apache.commons.lang3.time.DateFormatUtils; import java.lang.management.ManagementFactory; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.util.*; /** * 时间工具类 * * @author ruoyi */ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public static String YYYY = "yyyy"; public static String MM = "MM"; public static String dd = "dd"; public static String YYYY_MM = "yyyy-MM"; public static String YYYY_MM_DD = "yyyy-MM-dd"; public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; /** * 获取当前Date型日期 * * @return Date() 当前日期 */ public static Date getNowDate() { return new Date(); } /** * 获取当前日期, 默认格式为yyyy-MM-dd * * @return String */ public static String getDate() { return dateTimeNow(YYYY_MM_DD); } public static String getDay() { return dateTimeNow(dd); } public static final String getTime() { return dateTimeNow(YYYY_MM_DD_HH_MM_SS); } public static final String dateTimeNow() { return dateTimeNow(YYYYMMDDHHMMSS); } public static final String dateTimeNow(final String format) { return parseDateToStr(format, new Date()); } public static final String dateTime(final Date date) { return parseDateToStr(YYYY_MM_DD, date); } public static final String parseDateToStr(final String format, final Date date) { return new SimpleDateFormat(format).format(date); } public static final Date dateTime(final String format, final String ts) { try { return new SimpleDateFormat(format).parse(ts); } catch (ParseException e) { throw new RuntimeException(e); } } /** * 日期路径 即年/月/日 如2018/08/08 */ public static final String datePath() { Date now = new Date(); return DateFormatUtils.format(now, "yyyy/MM/dd"); } /** * 日期路径 即年/月/日 如20180808 */ public static final String dateTime() { Date now = new Date(); return DateFormatUtils.format(now, "yyyyMMdd"); } /** * 日期型字符串转化为日期 格式 */ public static Date parseDate(Object str) { if (str == null) { return null; } try { return parseDate(str.toString(), parsePatterns); } catch (ParseException e) { return null; } } /** * 获取服务器启动时间 */ public static Date getServerStartDate() { long time = ManagementFactory.getRuntimeMXBean().getStartTime(); return new Date(time); } /** * 计算两个时间差多少天 */ public static long getDateDay(Date endDate, Date nowDate) { long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 * 60; long nm = 1000 * 60; // long ns = 1000; // 获得两个时间的毫秒时间差异 long diff = endDate.getTime() - nowDate.getTime(); // 计算差多少天 long day = diff / nd + 1L; return day; } /** * 计算两个时间差 */ public static String getDatePoor(Date endDate, Date nowDate) { long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 * 60; long nm = 1000 * 60; // long ns = 1000; // 获得两个时间的毫秒时间差异 long diff = endDate.getTime() - nowDate.getTime(); // 计算差多少天 long day = diff / nd; // 计算差多少小时 long hour = diff % nd / nh; // 计算差多少分钟 long min = diff % nd % nh / nm; // 计算差多少秒//输出结果 // long sec = diff % nd % nh % nm / ns; return day + "天" + hour + "小时" + min + "分钟"; } /** * 当前日期往前往后推x天 */ public static Date dateAdd(Date date, int num) { Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(Calendar.DATE,num); return calendar.getTime(); } /** * 获取当天开始与结束日期 * @return */ public static List getCurrentDay() { List stringList = new ArrayList<>(); Calendar cale = null; cale = Calendar.getInstance(); // 获取当月第一天和最后一天 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String firstday, lastday; // 获取前月的第一天 cale = Calendar.getInstance(); firstday = format.format(cale.getTime()) + " 00:00:00"; stringList.add(firstday); // 获取前月的最后一天 cale = Calendar.getInstance(); lastday = format.format(cale.getTime()) + " 23:59:59"; stringList.add(lastday); return stringList; } /** * 获取当天开始与结束日期 * @return */ public static List getSpecifyDay(Date date) { List stringList = new ArrayList<>(); SimpleDateFormat format = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS); String firstday, lastday; Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0); calendar.set(Calendar.MILLISECOND, 0); Date dete1 = new Date(calendar.getTimeInMillis());//得到指定日期的开始时间 calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59); calendar.set(Calendar.MILLISECOND, 999); Date dete2 = new Date(calendar.getTimeInMillis());//得到指定日期的结束时间 firstday = format.format(dete1.getTime()); stringList.add(firstday); lastday = format.format(dete2.getTime()); stringList.add(lastday); return stringList; } /** * 获取当前月份第一天与最后一天 * @return */ public static List getMonthList() { List stringList = new ArrayList<>(); Calendar cale = null; cale = Calendar.getInstance(); // 获取当月第一天和最后一天 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String firstday, lastday; // 获取前月的第一天 cale = Calendar.getInstance(); cale.add(Calendar.MONTH, 0); cale.set(Calendar.DAY_OF_MONTH, 1); firstday = format.format(cale.getTime()) + " 00:00:00"; stringList.add(firstday); // 获取前月的最后一天 cale = Calendar.getInstance(); cale.add(Calendar.MONTH, 1); cale.set(Calendar.DAY_OF_MONTH, 0); lastday = format.format(cale.getTime()) + " 23:59:59"; stringList.add(lastday); return stringList; } /** * 获取指定年份月份的第一天 * @param year 年份 * @param month 月份 * @return 结果 */ public static String getFirstDay(int year, int month) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // 获取Calendar类的实例 Calendar c = Calendar.getInstance(); // 设置年份 c.set(Calendar.YEAR, year); // 设置月份,因为月份从0开始,所以用month - 1 c.set(Calendar.MONTH, month - 1); // 设置日期 c.set(Calendar.DAY_OF_MONTH, 1); return format.format(c.getTime()) + " 00:00:00"; } /** * 获取指定年份月份的最后一天 * @param year 年份 * @param month 月份 * @return 结果 */ public static String getLastDay(int year, int month) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // 获取Calendar类的实例 Calendar c = Calendar.getInstance(); // 设置年份 c.set(Calendar.YEAR, year); // 设置月份,因为月份从0开始,所以用month - 1 c.set(Calendar.MONTH, month - 1); // 获取当前时间下,该月的最大日期的数字 int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); // 将获取的最大日期数设置为Calendar实例的日期数 c.set(Calendar.DAY_OF_MONTH, lastDay); return format.format(c.getTime()) + " 23:59:59"; } /** * 获取精确到毫秒的时间戳 * @param date 当前世界 * @return 结果 **/ public static Long getTimestamp(Date date) { if (null == date) { return (long) 0; } String timestamp = String.valueOf(date.getTime()); return Long.valueOf(timestamp); } /** * 判断当前时间是否在某个时间之前 * * @param tagDateTime 判断的标准 * @return true是,false不是 */ public static boolean belongCalendarBefore(Date tagDateTime) { return tagDateTime.before(new Date()); } /** * 返货传入时间当天最大值 * @param date * @return */ public static Date dateConversionMax(Date date) { LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault()); LocalDateTime startOfDay = localDateTime.with(LocalTime.MAX); return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); } /** * 返货传入时间当天最小值 * @param date * @return */ public static Date dateConversionMin(Date date) { LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault()); LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN); return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()); } /** * 传入时间返回时间戳 * @param date * @return */ public static String dateToString (Date date) { return parseDateToStr(YYYY_MM_DD_HH_MM_SS, date); } /** * 获取传入日期年份 * @param date * @return */ public static String getYear (Date date) { return parseDateToStr(YYYY, date); } /** * 获取传入日期月份 * @param date * @return */ public static String getMonth (Date date) { return parseDateToStr(MM, date); } public static String today() { return dateTimeNow(YYYY_MM_DD); } public static String yesterday() { return offsetDate(-1); } public static String beginOfWeek() { Calendar cale = Calendar.getInstance(); cale.add(Calendar.WEEK_OF_MONTH, 0); cale.set(Calendar.DAY_OF_WEEK, 2); return dateTime(cale.getTime()); } public static String endOfWeek() { Calendar cale = Calendar.getInstance(); cale.set(Calendar.DAY_OF_WEEK, cale.getActualMaximum(Calendar.DAY_OF_WEEK)); cale.add(Calendar.DAY_OF_WEEK, 1); return dateTime(cale.getTime()); } public static String beginOfLastWeek() { Calendar cale = Calendar.getInstance(); cale.add(Calendar.WEEK_OF_MONTH, -1); cale.set(Calendar.DAY_OF_WEEK, 2); return dateTime(cale.getTime()); } public static String endOfLastWeek() { Calendar cale = Calendar.getInstance(); cale.set(Calendar.DAY_OF_WEEK, cale.getActualMinimum(Calendar.DAY_OF_WEEK)); return dateTime(cale.getTime()); } public static String beginOfMonth() { Calendar cale = Calendar.getInstance(); cale.add(Calendar.MONTH, 0); cale.set(Calendar.DAY_OF_MONTH, 1); return dateTime(cale.getTime()); } public static String endOfMonth() { Calendar cale = Calendar.getInstance(); cale.add(Calendar.MONTH, 1); cale.set(Calendar.DAY_OF_MONTH, 0); return dateTime(cale.getTime()); } public static String beginOfLastMonth() { Calendar cale = Calendar.getInstance(); cale.add(Calendar.MONTH, -1); cale.set(Calendar.DAY_OF_MONTH, 1); return dateTime(cale.getTime()); } public static String endOfLastMonth() { Calendar cale = Calendar.getInstance(); cale.add(Calendar.MONTH, 0); cale.set(Calendar.DAY_OF_MONTH, 0); return dateTime(cale.getTime()); } public static String offsetDate(int num) { Calendar calendar = new GregorianCalendar(); calendar.setTime(new Date()); calendar.add(Calendar.DATE, num); return dateTime(calendar.getTime()); } public static String offsetMonth(int num) { Calendar cale = Calendar.getInstance(); cale.add(Calendar.MONTH, num); return dateTime(cale.getTime()); } public static String offsetFormatMonth(int num, String format) { SimpleDateFormat sf = new SimpleDateFormat(format); Calendar cale = Calendar.getInstance(); cale.add(Calendar.MONTH, num); return sf.format(cale.getTime()); } public static String beginOfOffsetMonth(int num) { Calendar cale = Calendar.getInstance(); cale.add(Calendar.MONTH, num); cale.set(Calendar.DAY_OF_MONTH, 1); return dateTime(cale.getTime()); } public static String endOfOffsetMonth(int num) { Calendar cale = Calendar.getInstance(); cale.add(Calendar.MONTH, num + 1); cale.set(Calendar.DAY_OF_MONTH, 0); return dateTime(cale.getTime()); } public static Date todayBegin() { Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } public static Date todayEnd() { Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); } public static String getDayOfYear(int type, int year) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.YEAR, year); if (type == 0) { return sdf.format(calendar.getTime()) + " 00:00:00"; } return sdf.format(calendar.getTime()) + " 23:59:59"; } public static String getDayOfMonth(int type, int month) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, month); if (type == 0) { calendar.add(Calendar.DATE, 1); return sdf.format(calendar.getTime()) + " 00:00:00"; } return sdf.format(calendar.getTime()) + " 23:59:59"; } }