1、日期格式化-工具类-One
/** * 日期工具类 */public class DateUtils extends org.apache.commons.lang3.time.DateUtils { 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"}; /** * 得到当前日期字符串 格式(yyyy-MM-dd) */ public static String getDate() { return getDate("yyyy-MM-dd"); } /** * 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E" */ public static String getDate(String pattern) { return DateFormatUtils.format(new Date(), pattern); } /** * 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E" */ public static String formatDate(Date date, Object... pattern) { String formatDate = null; if (pattern != null && pattern.length > 0) { formatDate = DateFormatUtils.format(date, pattern[0].toString()); } else { formatDate = DateFormatUtils.format(date, "yyyy-MM-dd"); } return formatDate; } /** * 字符串转日期 * 默认格式(yyyy-MM-dd HH:mm:ss) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" */ public static Date stringToDate(String string, String pattern) { SimpleDateFormat sdf = null; Date date = null; try { if (pattern != null && pattern.length() > 0) { sdf = new SimpleDateFormat(pattern); date = sdf.parse(string); } else { sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); date = sdf.parse(string); } } catch (ParseException e) { e.printStackTrace(); } return date; } /** * 得到日期时间字符串,转换格式(yyyy-MM-dd HH:mm:ss) */ public static String formatDateTime(Date date) { return formatDate(date, "yyyy-MM-dd HH:mm:ss"); } /** * 得到当前时间字符串 格式(HH:mm:ss) */ public static String getTime() { return formatDate(new Date(), "HH:mm:ss"); } /** * 得到当前日期和时间字符串 格式(yyyy-MM-dd HH:mm:ss) */ public static String getDateTime() { return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"); } /** * 得到当前年份字符串 格式(yyyy) */ public static String getYear() { return formatDate(new Date(), "yyyy"); } /** * 得到当前月份字符串 格式(MM) */ public static String getMonth() { return formatDate(new Date(), "MM"); } /** * 得到当天字符串 格式(dd) */ public static String getDay() { return formatDate(new Date(), "dd"); } /** * 得到当前星期字符串 格式(E)星期几 */ public static String getWeek() { return formatDate(new Date(), "E"); } /** * 得到当前星期字符串 格式(E)星期几 * * @param string */ public static String getWeek(String string) { return formatDate(stringToDate(string, ""), "E"); } /** * 日期型字符串转化为日期 格式 * { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", * "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", * "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm" } */ public static Date parseDate(Object str) { if (str == null) { return null; } try { return parseDate(str.toString(), parsePatterns); } catch (ParseException e) { return null; } } /** * 获取过去的天数 * * @param date * @return */ public static long pastDays(Date date) { long t = System.currentTimeMillis() - date.getTime(); return t / (24 * 60 * 60 * 1000); } /** * 获取过去的小时 * * @param date * @return */ public static long pastHour(Date date) { long t = System.currentTimeMillis() - date.getTime(); return t / (60 * 60 * 1000); } /** * 获取过去的分钟 * * @param date * @return */ public static long pastMinutes(Date date) { long t = System.currentTimeMillis() - date.getTime(); return t / (60 * 1000); } /** * 转换为时间(天,时:分:秒.毫秒) * * @param timeMillis * @return */ public static String formatDateTime(long timeMillis) { long day = timeMillis / (24 * 60 * 60 * 1000); long hour = (timeMillis / (60 * 60 * 1000) - day * 24); long min = ((timeMillis / (60 * 1000)) - day * 24 * 60 - hour * 60); long s = (timeMillis / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); long sss = (timeMillis - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000 - s * 1000); return (day > 0 ? day + "," : "") + hour + ":" + min + ":" + s + "." + sss; } /** * 获取两个日期之间的天数 * * @param before * @param after * @return */ public static double getDistanceOfTwoDate(Date before, Date after) { long beforeTime = before.getTime(); long afterTime = after.getTime(); return (afterTime - beforeTime) / (1000 * 60 * 60 * 24); } /** * 获取当前日期前一天日期 * * @return */ public static String getBeforeDate() { Calendar calendar = Calendar.getInstance(); //得到日历 calendar.setTime(new Date());//把当前时间赋给日历 calendar.add(Calendar.DAY_OF_MONTH, -1); //设置为前一天 Date dBefore = calendar.getTime(); //得到前一天的时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); //设置时间格式 String beforeDate = sdf.format(dBefore); //格式化前一天 return beforeDate; } /** * @param day 获取当前日期前后day天日期,day>0后几天,day<0前几天 * @param curdate 当前日期 * @return */ public static String getAfterDate(int day, String curdate, String dateFormat) { Calendar calendar = Calendar.getInstance(); calendar.setTime(stringToDate(curdate, dateFormat)); calendar.add(Calendar.DAY_OF_MONTH, day); Date dAfter = calendar.getTime(); SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); String afterDate = sdf.format(dAfter); return afterDate; } /** * @param day 获取当前日期前后day天日期,day>0后几天,day<0前几天 * @return */ public static String getAfterDate(int day, String dateFormat) { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.DAY_OF_MONTH, day); Date dAfter = calendar.getTime(); SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); String afterDate = sdf.format(dAfter); return afterDate; } public static Date getThisWeekMonday(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); // 获得当前日期是一个星期的第几天 int dayWeek = cal.get(Calendar.DAY_OF_WEEK); if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); // 获得当前日期是一个星期的第几天 int day = cal.get(Calendar.DAY_OF_WEEK); // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day); return cal.getTime(); } /** * 获取本周一 * * @param dateFormat * @return */ public static String getThisWeekMonday(String dateFormat) { Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); // 获得当前日期是一个星期的第几天 int dayWeek = cal.get(Calendar.DAY_OF_WEEK); if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); // 获得当前日期是一个星期的第几天 int day = cal.get(Calendar.DAY_OF_WEEK); // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day); SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式 return sdf.format(cal.getTime()); } /** * 获取下周一 * * @param dateFormat * @return */ public static String getNextWeekMonday(String dateFormat) { Calendar cal = Calendar.getInstance(); cal.setTime(getThisWeekMonday(new Date())); cal.add(Calendar.DATE, 7); SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式 return sdf.format(cal.getTime()); } /** * 获取下月 * * @return */ public static String getNextMonth() { Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, +1);//下个月 String year = String.valueOf(c.get(Calendar.YEAR)); //下个月 String nextMonth = String.valueOf(c.get(Calendar.MONTH) + 1).length() == 2 ? String.valueOf(c.get(Calendar.MONTH) + 1) : "0" + String.valueOf(c.get(Calendar.MONTH) + 1); return year + "-" + nextMonth; } /** * 获取本月 * * @return */ public static String getThisMonth() { Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, 0);//本月 String year = String.valueOf(c.get(Calendar.YEAR)); //本月 String thisMonth = String.valueOf(c.get(Calendar.MONTH) + 1).length() == 2 ? String.valueOf(c.get(Calendar.MONTH) + 1) : "0" + String.valueOf(c.get(Calendar.MONTH) + 1); return year + "-" + thisMonth; } /** * 当前季度的开始时间 * * @return */ public static String getCurrentQuarterStartTime(String dateFormat) { SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式 Calendar c = Calendar.getInstance(); int currentMonth = c.get(Calendar.MONTH); try { if (currentMonth >= 1 && currentMonth <= 3) { c.set(Calendar.MONTH, 0); } else if (currentMonth >= 4 && currentMonth <= 6) { c.set(Calendar.MONTH, 3); } else if (currentMonth >= 7 && currentMonth <= 9) { c.set(Calendar.MONTH, 6); } else if (currentMonth >= 10 && currentMonth <= 12) { c.set(Calendar.MONTH, 9); c.set(Calendar.DATE, 1); } } catch (Exception e) { e.printStackTrace(); } return sdf.format(c.getTime()); } /** * 当前季度的结束时间 * * @return */ public static String getCurrentQuarterEndDate(String dateFormat) { SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式 Calendar c = Calendar.getInstance(); int currentMonth = c.get(Calendar.MONTH) + 1; try { if (currentMonth >= 1 && currentMonth <= 3) { c.set(Calendar.MONTH, 2); c.set(Calendar.DATE, 31); } else if (currentMonth >= 4 && currentMonth <= 6) { c.set(Calendar.MONTH, 5); c.set(Calendar.DATE, 30); } else if (currentMonth >= 7 && currentMonth <= 9) { c.set(Calendar.MONTH, 8); c.set(Calendar.DATE, 30); } else if (currentMonth >= 10 && currentMonth <= 12) { c.set(Calendar.MONTH, 11); c.set(Calendar.DATE, 31); } } catch (Exception e) { e.printStackTrace(); } c.setTime(new Date()); return sdf.format(c.getTime()); } /** * 当前季度的结束时间 * * @return */ public static String getCurrentQuarterEndDate(String dateFormat, String curMonth) { SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式 Calendar c = Calendar.getInstance(); int currentMonth = c.get(Calendar.MONTH) + 1; try { if (currentMonth >= 1 && currentMonth <= 3) { c.set(Calendar.MONTH, 2); c.set(Calendar.DATE, 31); } else if (currentMonth >= 4 && currentMonth <= 6) { c.set(Calendar.MONTH, 5); c.set(Calendar.DATE, 30); } else if (currentMonth >= 7 && currentMonth <= 9) { c.set(Calendar.MONTH, 8); c.set(Calendar.DATE, 30); } else if (currentMonth >= 10 && currentMonth <= 12) { c.set(Calendar.MONTH, 11); c.set(Calendar.DATE, 31); } } catch (Exception e) { e.printStackTrace(); } c.setTime(stringToDate(curMonth, dateFormat)); return sdf.format(c.getTime()); } /** * 获取月份 * * @param -month 前month月,i后month月 * @param dateFormat 日期格式 * @return */ public static String getMonth(int month, String dateFormat) { SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(Calendar.MONTH, month); Date m = c.getTime(); return sdf.format(m); } /** * 获取月份 * * @param -month 前month月,month后month月 * @param dateFormat 日期格式 yyyyMM * @param curMonth * @return */ public static String getMonth(int month, String curMonth, String dateFormat) { SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); Calendar c = Calendar.getInstance(); c.setTime(stringToDate(curMonth, dateFormat)); c.add(Calendar.MONTH, month); Date m = c.getTime(); return sdf.format(m); } /** * 获取前minute分钟时间:如-4,后minute分钟时间:如 4 * * @param minute 格式 yyyy-MM-dd HH:mm:ss * @return */ public static String getBeforeMinute(int minute) { SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]); Calendar beforeTime = Calendar.getInstance(); beforeTime.add(Calendar.MINUTE, minute); Date beforeD = beforeTime.getTime(); String time = sdf.format(beforeD); return time; } public static Date getIntervalMinute(int minute) { SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]); Calendar beforeTime = Calendar.getInstance(); beforeTime.add(Calendar.MINUTE, minute); Date beforeD = beforeTime.getTime(); return beforeD; } /** * 获取前minute分钟:如-4,后minute分钟:如 4 * @param minute * @return */ public static int getMinute(int minute){ String dataTime = getBeforeMinute(minute); String[] time = dataTime.split(" ")[1].split(":"); //时间转为分钟数 int mi = Integer.valueOf(time[0])*60 + Integer.valueOf(time[1]); return mi; } /** * 获取前minute分钟时间:如-4,后minute分钟时间:如 4 * * @param curDateTime 当前时间 * @param minute 间隔分钟 * 格式 yyyy-MM-dd HH:mm:ss * @return */ public static String getBeforeMinute(String curDateTime, int minute) { SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]); Calendar beforeTime = Calendar.getInstance(); beforeTime.setTime(stringToDate(curDateTime, null)); beforeTime.add(Calendar.MINUTE, minute); Date beforeD = beforeTime.getTime(); String time = sdf.format(beforeD); return time; } /** * 获取前hour小时:如-4,后hour小时:如 4 * * @param hour 格式 yyyy-MM-dd HH:mm:ss * @return */ public static String getBeforeHour(int hour) { SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]); Calendar beforeTime = Calendar.getInstance(); beforeTime.add(Calendar.HOUR_OF_DAY, hour); Date beforeD = beforeTime.getTime(); String time = sdf.format(beforeD); return time; } /** * 获取前second秒:如-4,后second秒:如 4 * * @param second 格式 yyyy-MM-dd HH:mm:ss * @return */ public static String getBeforeSecond(int second) { SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]); Calendar beforeTime = Calendar.getInstance(); beforeTime.add(Calendar.SECOND, second); Date beforeD = beforeTime.getTime(); String time = sdf.format(beforeD); return time; } /** * @param date1 字符串日期1 * @param date2 字符串日期2 * @param pattern 日期格式化方式 * @return * @descript:计算两个字符串月相差的月数 */ public static int countMonths(String date1, String date2, String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); try { c1.setTime(sdf.parse(date1)); c2.setTime(sdf.parse(date2)); } catch (ParseException e) { e.printStackTrace(); } int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR); //开始日期若小月结束日期 if (year < 0) { year = -year; return year * 12 + c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH); } return year * 12 + c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH); } /** * 获取当前时间前几天,当前天,后几天日期yyyyMMdd * * @param day 和当期天的间隔天数 day前几天,-day:前day天,day:后day天 * @param dateFormat 时间格式 * @return */ public static String getDay(int day, String dateFormat) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, day); Date date = calendar.getTime(); SimpleDateFormat df = new SimpleDateFormat(dateFormat); return df.format(date); } /** * 获取当前时间前几天,当前天,后几天日期yyyyMMdd * * @param day 和当期天的间隔天数 day前几天,-day:前day天,day:后day天 * @param dateFormat 时间格式 * @return */ public static String getDay(int day, String dateFormat, String curDay) { Calendar c = Calendar.getInstance(); c.setTime(stringToDate(curDay, dateFormat)); c.add(Calendar.DATE, day); Date date = c.getTime(); SimpleDateFormat df = new SimpleDateFormat(dateFormat); return df.format(date); } /** * 获取当前时间小时 * */ public static String getHour() { GregorianCalendar calendar = new GregorianCalendar(); int hour = calendar.get(Calendar.HOUR_OF_DAY); return hour + ""; } /** * 星期表达式转换 * * @param weekType * @return */ public static int getNumWeek(String weekType) { int week = 0; switch (weekType) { case "星期一": week = 1; break; case "星期二": week = 2; break; case "星期三": week = 3; break; case "星期四": week = 4; break; case "星期五": week = 5; break; case "星期六": week = 6; break; case "星期日": week = 7; break; default: } return week; } /** * 星期表达式转换 * * @param weekNum * @return */ public static String getWeekByNum(Integer weekNum) { String week = ""; switch (weekNum) { case 1: week = "星期一"; break; case 2: week = "星期二"; break; case 3: week = "星期三"; break; case 4: week = "星期四"; break; case 5: week = "星期五"; break; case 6: week = "星期六"; break; case 7: week = "星期日"; break; default: } return week; } /** * @param week 星期类型 :例如:星期一、星期二、星期三、星期四、星期五、星期六、星期日 * @param dateFormat 返回的日期格式 * @return */ public static String getDayByWeek(String week, String dateFormat) { int numWeek1 = getNumWeek(getWeek()); int numWeek2 = getNumWeek(week); int weekdiff = numWeek2 - numWeek1; return getDay(weekdiff, dateFormat); } /** * @param week 星期类型 :例如:星期一、星期二、星期三、星期四、星期五、星期六、星期日 * @param dateFormat 返回的日期格式 * @return */ public static String getDayByWeek(String week, String dateFormat, String curDay) { int numWeek1 = getNumWeek(getWeek(curDay)); int numWeek2 = getNumWeek(week); int weekdiff = numWeek2 - numWeek1; return getDay(weekdiff, dateFormat, curDay); } /** * 当前日期所在周的前一周 * 例如:201907 * * @return * @throws ParseException */ public static String getWeekAndYear(int day) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = format.parse(getAfterDate(day, "yyyy-MM-dd")); } catch (ParseException e) { e.getMessage(); } Calendar cal = Calendar.getInstance(); //设置周一为一周的第一天 cal.setFirstDayOfWeek(Calendar.MONDAY); cal.setTime(date); int week = cal.get(Calendar.WEEK_OF_YEAR); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); //如果月份是12月,且求出来的周数是第一周,说明该日期实质上是这一年的第53周,也是下一年的第一周 if(month>=11 && week <= 1){ week +=52; } String yearWeek = ""; if (week < 10) { yearWeek = year + "0" + week; } else { yearWeek = year + "" + week; } return yearWeek; } /** * 当前日期所在周的前一周 * 例如:201907 * * @return * @throws ParseException */ public static String getWeekAndYear(int day, String curWeek) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = format.parse(getAfterDate(day, "yyyy-MM-dd")); } catch (ParseException e) { e.getMessage(); } Calendar cal = Calendar.getInstance(); //设置周一为一周的第一天 cal.setFirstDayOfWeek(Calendar.MONDAY); cal.setTime(date); int week = cal.get(Calendar.WEEK_OF_YEAR); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); //如果月份是12月,且求出来的周数是第一周,说明该日期实质上是这一年的第53周,也是下一年的第一周 if(month>=11 && week <= 1){ week +=52; } String yearWeek = ""; if (week < 10) { yearWeek = year + "0" + week; } else { yearWeek = year + "" + week; } return yearWeek; } /** * 通过日期获取周数 * 格式:yyyy-MM-dd * @param day * @return */ public static String getWeekAndYear(String day, String pattern) { SimpleDateFormat format = new SimpleDateFormat(pattern); Date date = null; try { date = format.parse(day); } catch (ParseException e) { e.getMessage(); } Calendar cal = Calendar.getInstance(); //设置周一为一周的第一天 cal.setFirstDayOfWeek(Calendar.MONDAY); cal.setTime(date); int week = cal.get(Calendar.WEEK_OF_YEAR); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); //如果月份是12月,且求出来的周数是第一周,说明该日期实质上是这一年的第53周,也是下一年的第一周 if(month>=11 && week <= 1){ week +=52; } String yearWeek = ""; if (week < 10) { yearWeek = year + "0" + week; } else { yearWeek = year + "" + week; } return yearWeek; } /** * 获取日期所在周 * * @param curDate 格式:yyyyMMdd * @return */ public static String getWeekByDate(String curDate) { SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); Date date = null; try { date = format.parse(curDate); } catch (ParseException e) { e.printStackTrace(); } Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.setTime(date); int week = calendar.get(Calendar.WEEK_OF_YEAR); int year = calendar.getWeekYear(); String yearWeek = ""; if(week <10){ yearWeek = year + "0"+ week; }else{ yearWeek = year + ""+ week; } return yearWeek; } /** * 增加半小时 * @param day * @param min * @return */ public static String addHalfHour(String day, int min){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = null; try { date = format.parse(day); } catch (Exception ex) { ex.printStackTrace(); } if (date == null) { return ""; } Calendar cal = Calendar.getInstance(); cal.setTime(date); // 24小时制 cal.add(Calendar.MINUTE, min); date = cal.getTime(); return format.format(date); } /** * 窗口时间换算成毫秒数 * @param windowTime * @return */ public static Long getWindowMillis(String windowTime){ long windowTimeSecond = -1; String hour = "小时"; String minute = "分钟"; String second = "秒"; if (windowTime == null || windowTime.trim().length() == 0) { return windowTimeSecond; } windowTime = windowTime.replaceAll(" ", ""); if (windowTime.indexOf(second) > 0) { windowTime = windowTime.replace(second, "").trim(); windowTimeSecond = Integer.parseInt(windowTime) * 1000; } else if (windowTime.indexOf(minute) > 0) { windowTime = windowTime.replace(minute, "").trim(); windowTimeSecond = Integer.parseInt(windowTime) * 60 * 1000; } else if (windowTime.indexOf(hour) > 0) { windowTime = windowTime.replace(hour, "").trim(); windowTimeSecond = Integer.parseInt(windowTime) * 60 * 60 * 1000; } return windowTimeSecond; } /** * 获取所在周开始时间 * @param weekYear 年 2020 * @param weekOfYear 周 12 * @param pattern 日期格式 * @return */ public static String getFirstDayOfWeek(int weekYear, int weekOfYear, String pattern){ Calendar calendar = Calendar.getInstance(); //设置星期一为一周开始的第一天 calendar.setFirstDayOfWeek(Calendar.MONDAY); //可以不用设置 calendar.setMinimalDaysInFirstWeek(4); calendar.setTimeInMillis(System.currentTimeMillis()); //获得指定年的第几周的开始日期 calendar.setWeekDate(weekYear, weekOfYear, 2); //创建日期的时间该周的第一天 long starttime = calendar.getTime().getTime(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern); //将时间戳格式化为指定格式 String dateStart = simpleDateFormat.format(starttime); dateStart = getAfterDate(-7, dateStart, pattern); return dateStart; } /** * 获取指定周前几周 * @param curWeek 当前周 202012 * @param num 前后几周 * @param pattern 日期格式 * @return */ public static String getAfterWeek(String curWeek,int num, String pattern){ //年 int weekYear = Integer.valueOf(curWeek.substring(0,4)); //周数 int weekOfYear = Integer.valueOf(curWeek.substring(4,6)); //周对应的开始日期 String weekDate = getFirstDayOfWeek(weekYear, weekOfYear, pattern); //获取前后几天 String afterDate = getAfterDate(num*7, weekDate, pattern); String yearAndWeek = getWeekAndYear(afterDate,pattern); //年 int weekYear1 = Integer.valueOf(yearAndWeek.substring(0,4)); //当前年和前一年同时存在,取当前年第一周 if(weekYear > weekYear1){ yearAndWeek = weekYear+"01"; } return yearAndWeek; } /** * 计算相差的天数 * @param startDate * @param endDate * @return * @throws ParseException */ public static int getDayDiffer(Date startDate, Date endDate) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); long startDateTime = 0; try { startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime(); long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime(); return (int) ((endDateTime - startDateTime) / (1000 * 3600 * 24)); } catch (ParseException e) { e.printStackTrace(); } return 0; } public static int getMiniteDiffer(Date startDate, Date endDate) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long startDateTime = 0; try { startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime(); long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime(); return (int) (endDateTime - startDateTime) / (1000 * 60); } catch (ParseException e) { e.printStackTrace(); } return 0; } /** * 获取指定时间diff小时后的数据 * @param strDate * @param pattern * @param diff * @return */ public static String getHourDiffer(String strDate, String pattern, int diff) { Date date = DateUtils.stringToDate(strDate, pattern); Calendar rightNow = Calendar.getInstance(); rightNow.setTime(date); rightNow.add(Calendar.HOUR, diff); rightNow.add(Calendar.MINUTE, -5); Date time = rightNow.getTime(); String times = DateUtils.formatDateTime(time); return times; }}