package platform.common.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import platform.modules.sys.service.SysConfigService; import javax.annotation.PostConstruct; /** * Created by luohaifeng on 2017/8/9. */ public class DateUtil { public static String YYYY_MM_DD = "yyyy-MM-dd"; public static String YYYY_MM = "yyyy-MM"; public static String getCurrentDateString(String fmt) { SimpleDateFormat sdf = new SimpleDateFormat(fmt); return sdf.format(new Date()); } public static String getCurrentDateString() { return getCurrentDateString(YYYY_MM_DD); } /** * 日期转字符串 * * @param date * @return */ public static String getTimeString(Date date) { if (null == date) { return ""; } else { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return simpleDateFormat.format(date); } } // 获取当前时间 public static Date getNowDate() { TimeZone time = TimeZone.getTimeZone("Asia/Shanghai"); TimeZone.setDefault(time); Date now = new Date(); return now; } public static String getTime(Date date) { if (null == date) { return ""; } else { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(YYYY_MM_DD); return simpleDateFormat.format(date); } } /** * 日期转字符串 yyyy-MM-dd * * @param date * @return */ public static String getTimeStringShort(Date date) { if (null == date) { return ""; } else { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); return simpleDateFormat.format(date); } } /** * 字符串转时间转换日期格式 * * @param date 时间字符串 * @param pattern 字符串时间格式 * @return * @throws ParseException */ public static Date parseTimeStringToDate(String date, String pattern) throws ParseException { if (null == date) { return null; } else { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); return simpleDateFormat.parse(date); } } public static long getDay(String pay_time, Integer cycle) throws ParseException { Date date = DateUtil.parseTimeStringToDate(pay_time, DateUtil.YYYY_MM_DD); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, -cycle); return (date.getTime() - calendar.getTimeInMillis()) / (24 * 60 * 60 * 1000); } public static Boolean isGenerate(String pay_time, Integer remind) throws ParseException { if (null == remind) { remind = 5; } Date date = DateUtil.parseTimeStringToDate(pay_time, DateUtil.YYYY_MM_DD); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, -remind); if (calendar.getTimeInMillis() <= new Date().getTime()) { return true; } return false; } /** * 2017-08-19 20:30 * * @return */ public static String[] getDate(String time) { String[] strs = time.split(":"); return strs; } public static String getPayTime(Integer payment_cycle, String contract_start_date) throws ParseException { Calendar plan = Calendar.getInstance(); plan.setTime(parseTimeStringToDate(contract_start_date, YYYY_MM_DD)); plan.add(Calendar.MONTH, payment_cycle); return getTimeStringShort(plan.getTime()); } public static String AddMonth(Integer month, String date) throws ParseException { Calendar plan = Calendar.getInstance(); plan.setTime(parseTimeStringToDate(date, YYYY_MM_DD)); plan.add(Calendar.MONTH, month); return getTimeStringShort(plan.getTime()); } public static String getCurrentMonth() throws ParseException { Calendar plan = Calendar.getInstance(); plan.setTime(new Date()); return String.valueOf(plan.get(Calendar.MONTH) + 1); } public static String getCurrentYear() throws ParseException { Calendar plan = Calendar.getInstance(); plan.setTime(new Date()); return String.valueOf(plan.get(Calendar.YEAR)); } public static String getMonthStart(String date) throws ParseException { Calendar plan = Calendar.getInstance(); plan.setTime(parseTimeStringToDate(date, YYYY_MM)); plan.add(Calendar.MONTH, 0); plan.set(Calendar.DAY_OF_MONTH, 1); return getTime(plan.getTime()); } public static String getMonthEnd(String date) throws ParseException { Calendar plan = Calendar.getInstance(); plan.setTime(parseTimeStringToDate(date, YYYY_MM)); plan.add(Calendar.MONTH, 1); plan.set(Calendar.DAY_OF_MONTH, 0); return getTime(plan.getTime()); } public static Boolean compareTo(String time1, String time2) throws ParseException { Date date1 = DateUtil.parseTimeStringToDate(time1, YYYY_MM_DD); Date date2 = DateUtil.parseTimeStringToDate(time2, YYYY_MM_DD); if (date1.getTime() - date2.getTime() >= 0) { return true; } else { return false; } } public static void main(String args[]) { try { System.out.println(getCurrentMonth()); System.out.println(getCurrentYear()); } catch (ParseException e) { e.printStackTrace(); } } /** * 两个日期之间的天数 * * @param date1 * @param date2 * @return * @throws ParseException */ public static int getDateSpace(String date1, String date2) throws ParseException { Calendar calst = Calendar.getInstance(); ; Calendar caled = Calendar.getInstance(); calst.setTime(DateUtil.parseTimeStringToDate(date1, YYYY_MM_DD)); caled.setTime(DateUtil.parseTimeStringToDate(date2, YYYY_MM_DD)); //设置时间为0时 calst.set(Calendar.HOUR_OF_DAY, 0); calst.set(Calendar.MINUTE, 0); calst.set(Calendar.SECOND, 0); caled.set(Calendar.HOUR_OF_DAY, 0); caled.set(Calendar.MINUTE, 0); caled.set(Calendar.SECOND, 0); //得到两个日期相差的天数 int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst.getTime().getTime() / 1000)) / 3600 / 24; return days; } //获取审核剩余时间 审核时间5天 public static String getOverTimeStr(String create_time, Integer overDay) throws ParseException { String overTimeStr = ""; if (null == overDay) { overDay = 5; } if (StringUtils.isNotBlank(create_time)) { Calendar overTime = Calendar.getInstance(); Calendar now = Calendar.getInstance(); overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss")); overTime.add(Calendar.DATE, overDay); now.setTime(new Date()); overTime.set(Calendar.MINUTE, 0); overTime.set(Calendar.SECOND, 0); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); //得到两个日期相差的小时数 int hours = ((int) (overTime.getTime().getTime() / 1000) - (int) (now.getTime().getTime() / 1000)) / 3600; if (hours / 24 > 0) { overTimeStr = "剩余" + String.valueOf((int) Math.floor(hours / 24)) + "个工作日";//+(hours%24)+"小时"; } else { overTimeStr = "超出" + String.valueOf((-1) * (int) Math.floor(hours / 24)) + "个工作日";//+(hours%24)+"小时"; } } return overTimeStr; } //获取审核处理时间 审核时间5天 public static String getDealTimeStr(String create_time, String deal_time, Integer overDay) throws ParseException { String overTimeStr = ""; if (null == overDay) { overDay = 5; } if (StringUtils.isNotBlank(create_time) && StringUtils.isNotBlank(deal_time)) { Calendar overTime = Calendar.getInstance(); Calendar dealTime = Calendar.getInstance(); overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss")); overTime.add(Calendar.DATE, overDay); dealTime.setTime(DateUtil.parseTimeStringToDate(deal_time, "yyyy-MM-dd HH:mm:ss")); overTime.set(Calendar.MINUTE, 0); overTime.set(Calendar.SECOND, 0); dealTime.set(Calendar.MINUTE, 0); dealTime.set(Calendar.SECOND, 0); //得到两个日期相差的小时数 int hours = ((int) (overTime.getTime().getTime() / 1000) - (int) (dealTime.getTime().getTime() / 1000)) / 3600; if (hours / 24 > 0) { overTimeStr = "提前" + String.valueOf((int) Math.floor(hours / 24)) + "个工作日完成";//+(hours%24)+"小时完成"; } else { overTimeStr = "超出" + String.valueOf((-1) * (int) Math.floor(hours / 24)) + "个工作日完成";//+(hours%24)+"小时完成"; } } return overTimeStr; } //5秒内不能重复同一请求 public static boolean isFrequent(String time) throws ParseException { Date preTime = DateUtil.parseTimeStringToDate(time, "yyyy-MM-dd HH:mm:ss"); Date currTime = new Date(); if (currTime.getTime() - preTime.getTime() < 5000) { return true; } return false; } public static String getDayStart(String datetime) throws ParseException { if (CommonUtils.isNull(datetime)) { return null; } else { Date date = parseTimeStringToDate(datetime.substring(0, 10), YYYY_MM_DD); String dayStart = datetime.substring(0, 10) + " 00:00:00"; return dayStart; } } public static String getDayEnd(String datetime) throws ParseException { if (CommonUtils.isNull(datetime)) { return null; } else { Date date = parseTimeStringToDate(datetime.substring(0, 10), YYYY_MM_DD); String dayEnd = datetime.substring(0, 10) + " 23:59:59"; return dayEnd; } } public static String getTomorrow() { Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(5, 1); date = calendar.getTime(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String dateString = formatter.format(date); return dateString; } public static String getAfterDayDate(int len) { Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(5, len); date = calendar.getTime(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String dateString = formatter.format(date); return dateString; } // 获得当天0点时间 public static Date getTimesmorning() { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTime(); } // 获得当天24点时间 public static Date getTimesnight() { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 24); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTime(); } // 获得本周一0点时间 public static Date getTimesWeekmorning() { Calendar cal = Calendar.getInstance(); cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return cal.getTime(); } // 获得本周日24点时间 public static Date getTimesWeeknight() { Calendar cal = Calendar.getInstance(); cal.setTime(getTimesWeekmorning()); cal.add(Calendar.DAY_OF_WEEK, 7); return cal.getTime(); } // 获得本月第一天0点时间 public static Date getTimesMonthmorning() { Calendar cal = Calendar.getInstance(); cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH)); return cal.getTime(); } // 获得本月最后一天24点时间 public static Date getTimesMonthnight() { Calendar cal = Calendar.getInstance(); cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); cal.set(Calendar.HOUR_OF_DAY, 24); return cal.getTime(); } /** * 获取两个日期相差的月数 */ public static int getMonthDiff(Date d1, Date d2) { Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); int year1 = c1.get(Calendar.YEAR); int year2 = c2.get(Calendar.YEAR); int month1 = c1.get(Calendar.MONTH); int month2 = c2.get(Calendar.MONTH); int day1 = c1.get(Calendar.DAY_OF_MONTH); int day2 = c2.get(Calendar.DAY_OF_MONTH); // 获取年的差值  int yearInterval = year1 - year2; // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数 if (month1 < month2 || month1 == month2 && day1 < day2) { yearInterval--; } // 获取月数差值 int monthInterval = (month1 + 12) - month2; if (day1 < day2) { monthInterval--; } monthInterval %= 12; int monthsDiff = Math.abs(yearInterval * 12 + monthInterval); return monthsDiff; } public static String getTimeDiffStr(String startDate, int days) { try { DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d1 = null; Date beginDate = df.parse(startDate); Calendar calendar = Calendar.getInstance(); calendar.setTime(beginDate); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + days); Date endDate = df.parse(df.format(calendar.getTime())); d1 = endDate; Date d2 = new Date(); long date = d1.getTime() - d2.getTime(); long day = date / (1000 * 60 * 60 * 24); long hour = (date / (1000 * 60 * 60) - day * 24); long min = ((date / (60 * 1000)) - day * 24 * 60 - hour * 60); long s = (date / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); day = day < 0 ? 0 : day; hour = hour < 0 ? 0 : hour; min = min < 0 ? 0 : min; s = s < 0 ? 0 : s; return "" + day + "天" + hour + "小时" + min + "分" /*+ s + "秒"*/; } catch (ParseException e) { e.printStackTrace(); } return ""; } // public static String getTimeDiff(String create_time, String deal_time, Integer overDay, String holiday) throws ParseException { String overTimeStr = ""; if (null == overDay) { overDay = 5; } if (deal_time != null && deal_time != "") { if (StringUtils.isNotBlank(create_time) && StringUtils.isNotBlank(deal_time)) { Calendar overTime = Calendar.getInstance(); Calendar dealTime = Calendar.getInstance(); // overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss")); // overTime.add(Calendar.DATE, overDay); // overTime.set(Calendar.MINUTE, 0); // overTime.set(Calendar.SECOND, 0); int i = 0, j = 0; while (i < overDay) { j++; overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss")); overTime.add(Calendar.DATE, j); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMdd"); String deadline = simpleDateFormat.format(overTime.getTime()); if (!holiday.contains(deadline)) { i++; } } overTime.set(Calendar.HOUR_OF_DAY, 23); overTime.set(Calendar.MINUTE, 0); overTime.set(Calendar.SECOND, 0); dealTime.setTime(DateUtil.parseTimeStringToDate(deal_time, "yyyy-MM-dd HH:mm:ss")); dealTime.set(Calendar.MINUTE, 0); dealTime.set(Calendar.SECOND, 0); String deadline = getTimeString(overTime.getTime()); String dealDate = getTimeString(dealTime.getTime()); //得到两个日期相差的小时数 int hours = ((int) (overTime.getTime().getTime() / 1000) - (int) (dealTime.getTime().getTime() / 1000)) / 3600; if (hours > 24) { int count = (int) Math.floor(hours / 24); List days = getDays(dealDate, deadline, "yyyy-MM-dd HH:mm:ss", "MMdd"); for (String day : days) { if (holiday.contains(day)) { count--; } } overTimeStr = "提前" + count + "个工作日完成"; } else { int count = (int) Math.abs(Math.ceil(hours / 24)); List days = getDays(deadline, dealDate, "yyyy-MM-dd HH:mm:ss", "MMdd"); for (String day : days) { if (holiday.contains(day)) { count--; } } overTimeStr = "超出" + count + "个工作日完成"; } } return overTimeStr; } else { if (StringUtils.isNotBlank(create_time)) { Calendar overTime = Calendar.getInstance(); Calendar now = Calendar.getInstance(); // overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss")); // overTime.add(Calendar.DATE, overDay); // overTime.set(Calendar.MINUTE, 0); // overTime.set(Calendar.SECOND, 0); int i = 0, j = 0; while (i < overDay) { j++; overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss")); overTime.add(Calendar.DATE, j); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMdd"); String deadline = simpleDateFormat.format(overTime.getTime()); if (!holiday.contains(deadline)) { i++; } } overTime.set(Calendar.HOUR_OF_DAY, 23); overTime.set(Calendar.MINUTE, 0); overTime.set(Calendar.SECOND, 0); now.setTime(new Date()); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); String deadline = getTimeString(overTime.getTime()); String nowDate = getTimeString(new Date()); //得到两个日期相差的小时数 int hours = ((int) (overTime.getTime().getTime() / 1000) - (int) (now.getTime().getTime() / 1000)) / 3600; if (hours > 24) { int count = (int) Math.ceil(hours / 24); List days = getDays(nowDate, deadline, "yyyy-MM-dd HH:mm:ss", "MMdd"); for (String day : days) { if (holiday.contains(day)) { count--; } } overTimeStr = "剩余" + count + "个工作日"; } else { int count = (int) Math.abs(Math.ceil(hours / 24)); List days = getDays(deadline, nowDate, "yyyy-MM-dd HH:mm:ss", "MMdd"); for (String day : days) { if (holiday.contains(day)) { count--; } } overTimeStr = "超出" + count + "个工作日"; } } return overTimeStr; } } /** * 获取两个日期之间的所有日期 * * @param startTime 开始日期 * @param endTime 结束日期 * @return */ public static List getDays(String startTime, String endTime, String pattern1, String pattern2) { // 返回的日期集合 List days = new ArrayList(); if (pattern1 == null || pattern1 == "") { pattern1 = "yyyy-MM-dd"; } if (pattern2 == null || pattern2 == "") { pattern2 = "yyyy-MM-dd"; } DateFormat dateFormat1 = new SimpleDateFormat(pattern1); DateFormat dateFormat2 = new SimpleDateFormat(pattern2); try { Date start = dateFormat1.parse(startTime); Date end = dateFormat1.parse(endTime); Calendar tempStart = Calendar.getInstance(); tempStart.setTime(start); Calendar tempEnd = Calendar.getInstance(); tempEnd.setTime(end); tempEnd.add(Calendar.DATE, +0); while (tempStart.before(tempEnd)) { days.add(dateFormat2.format(tempStart.getTime())); tempStart.add(Calendar.DAY_OF_YEAR, 1); } } catch (ParseException e) { e.printStackTrace(); } return days; } protected static int absoluteDay(Calendar cal, boolean use1904windowing) { return 0; } }