package com.zhgd.xmgl.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.*; /** * @program: wisdomSite * @description: 日期格式 * @author: Mr.Peng * @create: 2020-12-15 17:05 **/ public class DateUtil { /** * 时间格式化 * @param oldDate * @return */ public static String dealDateFormat(String oldDate) { Date date1 = null; SimpleDateFormat df2 = null; try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); Date date = df.parse(oldDate); Calendar beijingcal=Calendar.getInstance(); beijingcal.setTime(date); //SimpleDateFormat df1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK); //date1 = df1.parse(date.toString()); beijingcal.set(Calendar.HOUR, beijingcal.get(Calendar.HOUR) + 8); date1 = beijingcal.getTime(); df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } catch (ParseException e) { e.printStackTrace(); } return df2.format(date1); } public static String parseDateFormat(String oldDate) { Date date = null; SimpleDateFormat df2 = null; try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); date = df.parse(oldDate); df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } catch (ParseException e) { e.printStackTrace(); } return df2.format(date); } public static String switchCreateTime(String createTime) { String formatStr2 = null; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");//注意格式化的表达式 try { Date time = format.parse(createTime ); String date = time.toString(); //将西方形式的日期字符串转换成java.util.Date对象 SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", java.util.Locale.US); Date datetime = (Date) sdf.parse(date); //再转换成自己想要显示的格式 formatStr2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(datetime); } catch (ParseException e) { e.printStackTrace(); } return formatStr2; } /** * 查询本周所有天数 * @return */ public static List getNowWeekAllDayList(){ Calendar cal = Calendar.getInstance(); // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了 // 获得当前日期是一个星期的第几天 int dayWeek = cal.get(Calendar.DAY_OF_WEEK); if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } // log.info("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期 // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); // 获得当前日期是一个星期的第几天 int day = cal.get(Calendar.DAY_OF_WEEK); // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day); return findDates(cal.getTime(),new Date()); } /** * 查询现在时间几天前到现在之间的所有日期 * @param days * @return */ public static List getOtherDayAllDayList(int days){ Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE,-days); return findDates(cal.getTime(),new Date()); } /** * 查询本月所有天数 * @return */ public static List getNowMonthAllDayList(){ Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 1); return findDates(cal.getTime(),new Date()); } /** * 获取两个时间段所有天数 * @param beginTime * @param endTime * @return */ public static List getDiffTimeDayList(String beginTime,String endTime){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { return findDates(sdf.parse(beginTime),sdf.parse(endTime)); } catch (ParseException e) { e.printStackTrace(); } return null; } public static List findDates(Date dBegin, Date dEnd){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); List lDate = new ArrayList(); lDate.add(sdf.format(dBegin)); Calendar calBegin = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calBegin.setTime(dBegin); Calendar calEnd = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calEnd.setTime(dEnd); // 测试此日期是否在指定日期之后 while (dEnd.after(calBegin.getTime())){ // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 calBegin.add(Calendar.DAY_OF_MONTH, 1); if(calBegin.getTimeInMillis()<=dEnd.getTime()) { lDate.add(sdf.format(calBegin.getTime())); } } return lDate; } /** * 获取指定年份所有天数 * @param yearMonth * @return */ public static List getYearAllMonthList(String yearMonth) { String year=yearMonth.substring(0,4); List list=new ArrayList<>(); for (int i = 1; i <=12 ; i++) { if(i<10){ list.add(year+"0"+i); }else{ list.add(year+i); } } return list; } /** * * @param yearMonth 月份格式yyyy-MM * @return */ public static List getMonthDayList(String yearMonth) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); //判断是否是当月 if(yearMonth.equals(sdf.format(new Date()))){ return getNowMonthAllDayList(); }else{ return getDayListOfMonth(yearMonth); } } public static List getDayListOfMonth(String yearMonth) { int year = Integer.parseInt(yearMonth.split("-")[0]); //年 int month = Integer.parseInt(yearMonth.split("-")[1]); //月 Calendar endCal = Calendar.getInstance(); // 设置年份 endCal.set(Calendar.YEAR, year); // 设置月份 endCal.set(Calendar.MONTH, month - 1); // 获取某月最大天数 int lastDay = endCal.getActualMaximum(Calendar.DATE); // 设置日历中月份的最大天数 endCal.set(Calendar.DAY_OF_MONTH, lastDay); Calendar startCal = Calendar.getInstance(); // 设置年份 startCal.set(Calendar.YEAR, year); // 设置月份 startCal.set(Calendar.MONTH, month - 1); //获取某月最小天数 int firstDay = startCal.getActualMinimum(Calendar.DAY_OF_MONTH); //设置日历中月份的最小天数 startCal.set(Calendar.DAY_OF_MONTH, firstDay); return findDates(startCal.getTime(),endCal.getTime()); } /** * 获取当前周第一天日期 * @return */ public static String getNowWeekStartTime(){ Calendar cal = Calendar.getInstance(); // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了 // 获得当前日期是一个星期的第几天 int dayWeek = cal.get(Calendar.DAY_OF_WEEK); if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } // log.info("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期 // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); // 获得当前日期是一个星期的第几天 int day = cal.get(Calendar.DAY_OF_WEEK); // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(cal.getTime()); } public static List getDiffTimeYearList(String beginTime,String endTime){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { return findYear(sdf.parse(beginTime),sdf.parse(endTime)); } catch (ParseException e) { e.printStackTrace(); } return null; } public static List findYear(Date dBegin, Date dEnd){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); List lDate = new ArrayList(); lDate.add(sdf.format(dBegin)); Calendar calBegin = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calBegin.setTime(dBegin); Calendar calEnd = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calEnd.setTime(dEnd); // 测试此日期是否在指定日期之后 while (dEnd.after(calBegin.getTime())){ // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 calBegin.add(Calendar.YEAR, 1); if(calBegin.getTimeInMillis()<=dEnd.getTime()) { lDate.add(sdf.format(calBegin.getTime())); } } return lDate; } public static List getDiffTimeMonthList(String beginTime,String endTime){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { return findMonth(sdf.parse(beginTime),sdf.parse(endTime)); } catch (ParseException e) { e.printStackTrace(); } return null; } public static List findMonth(Date dBegin, Date dEnd){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); List lDate = new ArrayList(); lDate.add(sdf.format(dBegin)); Calendar calBegin = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calBegin.setTime(dBegin); Calendar calEnd = Calendar.getInstance(); // 使用给定的 Date 设置此 Calendar 的时间 calEnd.setTime(dEnd); // 测试此日期是否在指定日期之后 while (dEnd.after(calBegin.getTime())){ // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 calBegin.add(Calendar.MONTH, 1); if(calBegin.getTimeInMillis()<=dEnd.getTime()) { lDate.add(sdf.format(calBegin.getTime())); } } return lDate; } public static List getDiffTimeWeekList(String beginTime,String endTime){ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate startDate = LocalDate.parse(beginTime,formatter); LocalDate endDate = LocalDate.parse(endTime,formatter); List lDate = new ArrayList(); while (endDate.isAfter(startDate)){ String start=startDate.format(formatter); if(startDate.getDayOfWeek()==DayOfWeek.SUNDAY) { lDate.add(start + "/" + start); }else{ LocalDate sunday = startDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); if (sunday.isAfter(endDate)) { lDate.add(start + "/" + endDate.format(formatter)); } else { lDate.add(start + "/" + sunday.format(formatter)); } } startDate=startDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).plusDays(1); } return lDate; } /** * 获取当前时间和当天时间几天前之间的所有天数 * @param dayNum 当天时间以前具体几天 * @return */ public static List getNowFewDaysAgoList(int dayNum){ try { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -dayNum); Date date = calendar.getTime(); return findDates(date,new Date()); } catch (Exception e) { e.printStackTrace(); } return null; } /** * * @param type 1 今日24 小时,2本周所有天,3本月所有天 * @return */ public static List getDayList(Integer type) { if(type==1){ List list=new ArrayList<>(); for(int i=0;i<=23;i++){ list.add(i+""); } return list; }else if(type==2){ return getNowWeekAllDayList(); }else if(type==3){ return getNowMonthAllDayList(); } return null; } /** * 比较两个日期大小 * @param time1 * @param time2 * @return * @throws ParseException */ public static boolean compareTime(String time1,String time2){ try { //如果想比较日期则写成"yyyy-MM-dd"就可以了 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //将字符串形式的时间转化为Date类型的时间 Date a=sdf.parse(time1); Date b=sdf.parse(time2); //Date类的一个方法,如果a早于b返回true,否则返回false //a时间下雨b时间返回true,否正返回false if(a.before(b)) { return true; }else { return false; } }catch (Exception e){ e.printStackTrace(); } return false; } /** * 查询当前时间指定天数之前的日期 * @Title: getBeginDayTime * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param days * @param @return 参数 * @return String 返回类型 * @throws */ public static String getBeginDayTime(int days){ Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE,-days); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(cal.getTime()); } public static void main(String[] args) { //log.info(dealDateFormat("2021-08-25T04:22:20+0000")); System.out.println(getOtherDayAllDayList(10)); } }