package com.artfess.manage.utils; import org.apache.commons.lang.StringUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * @Description: 日期工具类 * @ClassName: Utils * @Author: wjl * @Date: 2022/7/30 10:47 * @Version: 1.0 */ public class DateUtil{ /** * * @param dateString 指定时间yyyy-MM * @param n: n=1代表上一个月,n=-1代表下一个月 * @return * @throws ParseException */ public static String getPrevMonthDate(String dateString,int n) throws ParseException { Date date= new SimpleDateFormat("yyyy-MM").parse(dateString); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - n); return new SimpleDateFormat("yyyy-MM").format(calendar.getTime()); } /** * 获取当前时间 * * @param */ public static String getNowTime() { Calendar cal = Calendar.getInstance(); SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); String lastMonth = dft.format(cal.getTime()); return lastMonth; } /** * 判断当天是否为本月第一天 * * @return */ public static boolean isFirstDayOfMonth() { boolean flag = false; Calendar calendar = Calendar.getInstance(); int today = calendar.get(calendar.DAY_OF_MONTH); if (1 == today) { flag = true; } return flag; } /** * 获取当前月份最后一天 * * @param * @return * @throws */ public static String getMaxMonthDate() { SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); // calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return dft.format(calendar.getTime()); } /** * * 描述:获取下一个月的第一天. * * @return */ public static String getPerFirstDayOfMonth() { SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, 1); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); return dft.format(calendar.getTime()); } /** * * 描述:获取上个月的最后一天. * * @return */ public static String getLastMaxMonthDate() { SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return dft.format(calendar.getTime()); } /** * 获取上一个月 * * @return */ public static String getLastMonth() { Calendar cal = Calendar.getInstance(); cal.add(cal.MONTH, -1); SimpleDateFormat dft = new SimpleDateFormat("yyyyMM"); String lastMonth = dft.format(cal.getTime()); return lastMonth; } /** * * 描述:获取下一个月. * * @return */ public static String getPreMonth() { Calendar cal = Calendar.getInstance(); cal.add(cal.MONTH, 1); SimpleDateFormat dft = new SimpleDateFormat("yyyyMM"); String preMonth = dft.format(cal.getTime()); return preMonth; } // 是否是最后一天 public static boolean isLastDayOfMonth() { boolean flag = false; if (StringUtils.isNotBlank(getNowTime()) && StringUtils.isNotBlank(getMaxMonthDate()) && StringUtils.equals(getNowTime(), getMaxMonthDate())) { // getMaxMonthDate().equals(getNowTime()) flag = true; } return flag; } /** * 获取任意时间的下一个月 * 描述:<描述函数实现的功能>. * @param repeatDate * @return */ public static String getPreMonth(String repeatDate) { String lastMonth = ""; Calendar cal = Calendar.getInstance(); SimpleDateFormat dft = new SimpleDateFormat("yyyyMM"); int year = Integer.parseInt(repeatDate.substring(0, 4)); String monthsString = repeatDate.substring(4, 6); int month; if ("0".equals(monthsString.substring(0, 1))) { month = Integer.parseInt(monthsString.substring(1, 2)); } else { month = Integer.parseInt(monthsString.substring(0, 2)); } cal.set(year,month,Calendar.DATE); lastMonth = dft.format(cal.getTime()); return lastMonth; } /** * 获取任意时间的上一个月 * 描述:<描述函数实现的功能>. * @param repeatDate * @return */ public static String getLastMonth(String repeatDate) { String lastMonth = ""; Calendar cal = Calendar.getInstance(); SimpleDateFormat dft = new SimpleDateFormat("yyyyMM"); int year = Integer.parseInt(repeatDate.substring(0, 4)); String monthsString = repeatDate.substring(4, 6); int month; if ("0".equals(monthsString.substring(0, 1))) { month = Integer.parseInt(monthsString.substring(1, 2)); } else { month = Integer.parseInt(monthsString.substring(0, 2)); } cal.set(year,month-2,Calendar.DATE); lastMonth = dft.format(cal.getTime()); return lastMonth; } // /** * 获取任意时间的月的最后一天 * 描述:<描述函数实现的功能>. * @param repeatDate * @return */ public static String getMaxMonthDate(String repeatDate) { SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); try { if(StringUtils.isNotBlank(repeatDate) && !"{}".equals(repeatDate)){ calendar.setTime(dft.parse(repeatDate)); } } catch (ParseException e) { e.printStackTrace(); } // calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return dft.format(calendar.getTime()); } /** * * 描述:获取任意时间的月第一天 * @param repeatDate * @return */ public static String getMinMonthDate(String repeatDate){ SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); try { if(StringUtils.isNotBlank(repeatDate) && !"{}".equals(repeatDate)){ calendar.setTime(dft.parse(repeatDate)); } } catch (ParseException e) { e.printStackTrace(); } // calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); return dft.format(calendar.getTime()); } /** * 不论是当前时间,还是历史时间 皆是时间点的前天 * repeatDate 任意时间 */ public static String getModify2DaysAgo(String repeatDate) { Calendar cal = Calendar.getInstance(); String daysAgo = ""; SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); if (repeatDate == null || "".equals(repeatDate)) { cal.set(Calendar.DATE, cal.get(Calendar.DATE) - 2); } else { int year = Integer.parseInt(repeatDate.substring(0, 4)); String monthsString = repeatDate.substring(4, 6); int month; if ("0".equals(monthsString.substring(0, 1))) { month = Integer.parseInt(monthsString.substring(1, 2)); } else { month = Integer.parseInt(monthsString.substring(0, 2)); } String dateString = repeatDate.substring(6, 8); int date; if ("0".equals(dateString.subSequence(0, 1))) { date = Integer.parseInt(dateString.substring(1, 2)); } else { date = Integer.parseInt(dateString.substring(0, 2)); } cal.set(year, month-1, date - 1); System.out.println(dft.format(cal.getTime())); } daysAgo = dft.format(cal.getTime()); return daysAgo; } /** * 不论是当前时间,还是历史时间 皆是时间点的T-N天 * repeatDate 任意时间 param 数字 可以表示前几天 */ public static String getModifyNumDaysAgo(String repeatDate,int param) { Calendar cal = Calendar.getInstance(); String daysAgo = ""; SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); if (repeatDate == null || "".equals(repeatDate)) { cal.set(Calendar.DATE, cal.get(Calendar.DATE) - param); } else { int year = Integer.parseInt(repeatDate.substring(0, 4)); String monthsString = repeatDate.substring(4, 6); int month; if ("0".equals(monthsString.substring(0, 1))) { month = Integer.parseInt(monthsString.substring(1, 2)); } else { month = Integer.parseInt(monthsString.substring(0, 2)); } String dateString = repeatDate.substring(6, 8); int date; if ("0".equals(dateString.subSequence(0, 1))) { date = Integer.parseInt(dateString.substring(1, 2)); } else { date = Integer.parseInt(dateString.substring(0, 2)); } cal.set(year, month-1, date - param+1); System.out.println(dft.format(cal.getTime())); } daysAgo = dft.format(cal.getTime()); return daysAgo; } }