import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * 时间工具类:获取上周一周时间及上月时间 */ public class DateTestList { static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); /** * 获取过去7天内的日期数组 * @param intervals intervals天内 * @return 日期数组 */ public static ArrayList<String> getDays(int intervals) { ArrayList<String> pastDaysList = new ArrayList<>(); for (int i = intervals -1; i >= 0; i--) { pastDaysList.add(getPastDate(i)); } return pastDaysList; } /** * 获取过去第几天的日期 * @param past * @return */ public static String getPastDate(int past) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past); Date today = calendar.getTime(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String result = format.format(today); return result; } public static String getTimeInterval(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); } // System.out.println("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期 // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); // 获得当前日期是一个星期的第几天 int day = cal.get(Calendar.DAY_OF_WEEK); // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day); String imptimeBegin = sdf.format(cal.getTime()); // System.out.println("所在周星期一的日期:" + imptimeBegin); cal.add(Calendar.DATE, 6); String imptimeEnd = sdf.format(cal.getTime()); // System.out.println("所在周星期日的日期:" + imptimeEnd); return imptimeBegin + "," + imptimeEnd; } public static String getLastTimeInterval() { Calendar calendar1 = Calendar.getInstance(); Calendar calendar2 = Calendar.getInstance(); int dayOfWeek = calendar1.get(Calendar.DAY_OF_WEEK) - 1; int offset1 = 1 - dayOfWeek; int offset2 = 7 - dayOfWeek; calendar1.add(Calendar.DATE, offset1 - 7); calendar2.add(Calendar.DATE, offset2 - 7); // System.out.println(sdf.format(calendar1.getTime()));// last Monday String lastBeginDate = sdf.format(calendar1.getTime()); // System.out.println(sdf.format(calendar2.getTime()));// last Sunday String lastEndDate = sdf.format(calendar2.getTime()); return lastBeginDate + "," + lastEndDate; } public static List<Date> findDates(Date dBegin, Date dEnd) { List lDate = new ArrayList(); lDate.add(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); lDate.add(calBegin.getTime()); } return lDate; } public static List<Date> getLastWeek(){//获取上周时间 String yz_time=getLastTimeInterval();//获取上周时间 String array[]=yz_time.split(","); String start_time=array[0];//本周第一天 String end_time=array[1]; //本周最后一天 //格式化日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date dBegin = null; Date dEnd = null; try { dBegin = sdf.parse(start_time); dEnd = sdf.parse(end_time); } catch (ParseException e) { e.printStackTrace(); } List<Date> lDate = findDates(dBegin, dEnd);//获取这周所有date return lDate; } private static Date getMonthStart(Date date) { // Calendar calendar = Calendar.getInstance(); // calendar.setTime(date); // int index = calendar.get(Calendar.DAY_OF_MONTH); // calendar.add(Calendar.DATE, (1 - index)); // return calendar.getTime(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, -1); int index = calendar.get(Calendar.DAY_OF_MONTH); calendar.add(Calendar.DATE, (1 - index)); return calendar.getTime(); } private static Date getMonthEnd(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, 0);//calendar.add(Calendar.MONTH, 1); int index = calendar.get(Calendar.DAY_OF_MONTH); calendar.add(Calendar.DATE, (-index)); return calendar.getTime(); } private static Date getNext(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, 1); return calendar.getTime(); } public static List<String> getMonthDay() {//获取上月所有的日期 Date d = new Date(); // 月初 //System.out.println("月初" + sdf.format(getMonthStart(d))); // 月末 //System.out.println("月末" + sdf.format(getMonthEnd(d))); Date date = getMonthStart(d); Date monthEnd = getMonthEnd(d); List<String> list=new ArrayList<>(); while (!date.after(monthEnd)) { //System.out.println(sdf.format(date)); list.add(sdf.format(date)); date = getNext(date); } return list; } public static void main(String[] args){ getMonthDay(); System.out.println("过去七天的数据:"+getDays(7)); }