package com.nq.utils; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtil { /** * * @return 返回xx天前的日期 */ public static String lastWeek(int dayNum) { Date date = new Date(); int year = Integer.parseInt(new SimpleDateFormat("yyyy").format(date)); int month = Integer.parseInt(new SimpleDateFormat("MM").format(date)); int day = Integer.parseInt(new SimpleDateFormat("dd").format(date)) - dayNum; if (day < 1) { month -= 1; if (month == 0) { year -= 1; month = 12; } if (month == 4 || month == 6 || month == 9 || month == 11) { day = 30 + day; } else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { day = 31 + day; } else if (month == 2) { if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) day = 29 + day; else day = 28 + day; } } String y = year + ""; String m = ""; String d = ""; if (month < 10) m = "0" + month; else m = month + ""; if (day < 10) d = "0" + day; else d = day + ""; return y + "-" + m + "-" + d; } public static String nextDay(String date) { DateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); String nextDay = ""; try { Date temp = dft.parse(date); Calendar cld = Calendar.getInstance(); cld.setTime(temp); cld.add(Calendar.DATE, 1); temp = cld.getTime(); //获得下一天日期字符串 nextDay = dft.format(temp); } catch (ParseException e) { e.printStackTrace(); } return nextDay; } public static String lastManyDays(int dayNum){ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date date=new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -dayNum); date = calendar.getTime(); return sdf.format(date); } public static String afterManyDays(int dayNum){ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date date=new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, +dayNum); date = calendar.getTime(); return sdf.format(date); } public static String lastManyDays(String appointDate,int dayNum){ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat resultSdf=new SimpleDateFormat("MM-dd"); Date date = null; try { date = sdf.parse(appointDate); } catch (ParseException e) { e.printStackTrace(); } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -dayNum); date = calendar.getTime(); return resultSdf.format(date); } // 根据year年的第week周,查询本周的起止时间 public static String weekToDayFormate(String weekDays){ int weekDaysLength = weekDays.length(); int year = 0; int week = 0; String resultDay = ""; if (weekDays==null){ weekDays=new Date().toString(); }else { if (weekDays.substring(weekDaysLength-2,weekDaysLength-1).equals("1")){ year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2)); week = Integer.parseInt(weekDays.substring(weekDaysLength-2,weekDaysLength)); }else { year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2)); week = Integer.parseInt(weekDays.substring(weekDaysLength-1,weekDaysLength)); } } Calendar calendar = Calendar.getInstance(); // ①.设置该年份的开始日期:第一个月的第一天 calendar.set(year,0,1); // ②.计算出第一周还剩几天:+1是因为1号是1天 int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 1; // ③.周数减去第一周再减去要得到的周 week = week - 2; // ④.计算起止日期 calendar.add(Calendar.DAY_OF_YEAR,week * 7 + dayOfWeek); resultDay+=new SimpleDateFormat("MM/dd").format(calendar.getTime()); calendar.add(Calendar.DAY_OF_YEAR, 6); resultDay+="-"+new SimpleDateFormat("MM/dd").format(calendar.getTime()); return resultDay; } /** * 根据具体年的周数算出日期范围 * @param weekDays '%Y%u' 202106 * @param targetNum 往后推的周数 * @return MM-dd/MM-dd */ public static String getWeekDays(String weekDays,int targetNum) { int weekDaysLength = weekDays.length(); int year = 0; int week = 0; String resultDay = ""; if (weekDays==null){ weekDays=new Date().toString(); }else { if (weekDays.substring(weekDaysLength-2,weekDaysLength-1).equals("1")){ year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2)); week = Integer.parseInt(weekDays.substring(weekDaysLength-2,weekDaysLength)); }else { year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2)); week = Integer.parseInt(weekDays.substring(weekDaysLength-1,weekDaysLength)); } } // 计算目标周数 if (week + targetNum > 52) { year++; week += targetNum - 52; } else if (week + targetNum <= 0) { year--; week += targetNum + 52; } else { week += targetNum; } SimpleDateFormat sdf = new SimpleDateFormat("MM-dd"); Calendar cal = Calendar.getInstance(); // 设置每周的开始日期 cal.setFirstDayOfWeek(Calendar.SUNDAY); cal.set(Calendar.YEAR, year); cal.set(Calendar.WEEK_OF_YEAR, week); cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); String beginDate = sdf.format(cal.getTime()); cal.add(Calendar.DAY_OF_WEEK, 6); String endDate = sdf.format(cal.getTime()); return beginDate + "~" + endDate; } /** * 根据具体年的周数算出日期范围 * @param weekDays '%Y%u' 202106 * @return MM-dd/MM-dd */ public static String getWeekDays(String weekDays) { int weekDaysLength = weekDays.length(); int year = 0; int week = 0; String resultDay = ""; if (weekDays==null){ weekDays=new Date().toString(); }else { if (weekDays.substring(weekDaysLength-2,weekDaysLength-1).equals("1")){ year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2)); week = Integer.parseInt(weekDays.substring(weekDaysLength-2,weekDaysLength)); }else { year = Integer.parseInt(weekDays.substring(0,weekDaysLength-2)); week = Integer.parseInt(weekDays.substring(weekDaysLength-1,weekDaysLength)); } } SimpleDateFormat sdf = new SimpleDateFormat("MM-dd"); Calendar cal = Calendar.getInstance(); // 设置每周的开始日期 cal.setFirstDayOfWeek(Calendar.SUNDAY); cal.set(Calendar.YEAR, year); cal.set(Calendar.WEEK_OF_YEAR, week); cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); String beginDate = sdf.format(cal.getTime()); cal.add(Calendar.DAY_OF_WEEK, 6); String endDate = sdf.format(cal.getTime()); return beginDate + "/" + endDate; } /** * 时间戳转换成日期格式字符串 * @param seconds 精确到秒的字符串 * @return */ public static String timeStamp2Date(String seconds,String format) { if(seconds == null || seconds.isEmpty() || seconds.equals("null")){ return ""; } if(format == null || format.isEmpty()){ format = "yyyy-MM-dd HH:mm:ss"; } SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(new Date(Long.valueOf(seconds+"000"))); } }