package com.zcloud.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 说明:日期处理 * 作者:luoxiaobao * 官网:www.qdkjchina.com */ public class DateUtil { private final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); private final static SimpleDateFormat sdfMonth = new SimpleDateFormat("MM"); private final static SimpleDateFormat sdfOnlyDay = new SimpleDateFormat("dd"); private final static SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd"); private final static SimpleDateFormat sdfMDay = new SimpleDateFormat("yyyy-M-d"); private final static SimpleDateFormat sdfDays = new SimpleDateFormat("yyyyMMdd"); private final static SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss"); /** * 获取YYYY格式 * * @return */ public static String getSdfTimes() { return sdfTimes.format(new Date()); } /** * 获取YYYY格式 * * @return */ public static String getYear() { return sdfYear.format(new Date()); } public static String getYear(Date date) { return sdfYear.format(date); } public static String getMonth() { return sdfMonth.format(new Date()); } /** * 获取DD格式 * * @return */ public static String getOnlyDay() { return sdfOnlyDay.format(new Date()); } /** * 获取YYYY-MM-DD格式 * * @return */ public static String getDay() { return sdfDay.format(new Date()); } public static String MDay() { return sdfMDay.format(new Date()); } /** * 获取YYYYMMDD格式 * * @return */ public static String getDays() { return sdfDays.format(new Date()); } /** * 获取YYYY-MM-DD HH:mm:ss格式 * * @return */ public static String getTime() { return sdfTime.format(new Date()); } /** * @param s * @param e * @return boolean * @throws * @Title: compareDate * @Description: TODO(日期比较 , 如果s > = e 返回true 否则返回false) * @author fh */ public static boolean compareDate(String s, String e) { if (fomatDate(s) == null || fomatDate(e) == null) { return false; } return fomatDate(s).getTime() >= fomatDate(e).getTime(); } /** * 格式化日期 * * @return */ public static Date fomatDate(String date) { DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); try { return fmt.parse(date); } catch (ParseException e) { e.printStackTrace(); return null; } } /** * 格式化日期 * * @return */ public static Date fomatDateTime(String date) { DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return fmt.parse(date); } catch (ParseException e) { e.printStackTrace(); return null; } } /** * 校验日期是否合法 * * @return */ public static boolean isValidDate(String s) { DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); try { fmt.parse(s); return true; } catch (Exception e) { return false; // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 } } /** * @param startTime * @param endTime * @return */ public static int getDiffYear(String startTime, String endTime) { DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); try { int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse(startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365); return years; } catch (Exception e) { return 0; // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 } } /** *
  • 功能描述:时间相减得到天数 * * @param beginDateStr * @param endDateStr * @return long * @author Administrator */ public static long getDaySub(String beginDateStr, String endDateStr) { long day = 0; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date beginDate = null; Date endDate = null; try { beginDate = format.parse(beginDateStr); endDate = format.parse(endDateStr); } catch (ParseException e) { e.printStackTrace(); } day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000); //System.out.println("相隔的天数="+day); return day; } /** * 得到n天之后的日期 * * @param days * @return */ public static String getAfterDayDate(String days) { int daysInt = Integer.parseInt(days); Calendar canlendar = Calendar.getInstance(); // java.util包 canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 Date date = canlendar.getTime(); SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdfd.format(date); return dateStr; } /** * 当前时间加n小时之后的时间 * * @param days * @return */ public static String getAfterHourDate(String hours) { int hoursInt = Integer.parseInt(hours); Calendar canlendar = Calendar.getInstance(); // java.util包 canlendar.add(Calendar.HOUR, hoursInt); // 日期减 如果不够减会将月变动 Date date = canlendar.getTime(); SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdfd.format(date); return dateStr; } /** * 得到n天之后是周几 * * @param days * @return */ public static String getAfterDayWeek(String days) { int daysInt = Integer.parseInt(days); Calendar canlendar = Calendar.getInstance(); // java.util包 canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 Date date = canlendar.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("E"); String dateStr = sdf.format(date); return dateStr; } /** * 按照yyyy-MM-dd HH:mm:ss的格式,日期转字符串 * * @param date * @return yyyy-MM-dd HH:mm:ss */ public static String date2Str(Date date) { return date2Str(date, "yyyy-MM-dd HH:mm:ss"); } public static String date3Str(Date date) { return date2Str(date, "yyyy-M-d"); } /** * 按照yyyy-MM-dd HH:mm:ss的格式,字符串转日期 * * @param date * @return */ public static Date str2Date(String date) { if (Tools.notEmpty(date)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { return sdf.parse(date); } catch (ParseException e) { e.printStackTrace(); } return new Date(); } else { return null; } } /** * 把时间根据时、分、秒转换为时间段 * * @param StrDate */ public static String getTimes(String StrDate) { String resultTimes = ""; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date now; try { now = new Date(); Date date = df.parse(StrDate); long times = now.getTime() - date.getTime(); long day = times / (24 * 60 * 60 * 1000); long hour = (times / (60 * 60 * 1000) - day * 24); long min = ((times / (60 * 1000)) - day * 24 * 60 - hour * 60); long sec = (times / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); StringBuffer sb = new StringBuffer(); //sb.append("发表于:"); if (hour > 0) { sb.append(hour + "小时前"); } else if (min > 0) { sb.append(min + "分钟前"); } else { sb.append(sec + "秒前"); } resultTimes = sb.toString(); } catch (ParseException e) { e.printStackTrace(); } return resultTimes; } /** * 按照参数format的格式,日期转字符串 * * @param date * @param format * @return */ public static String date2Str(Date date, String format) { if (date != null) { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(date); } else { return ""; } } /** * 获取当年的第一天 * * @param year * @return * @author zhangyue */ public static String getCurrYearFirst() { Calendar currCal = Calendar.getInstance(); int currentYear = currCal.get(Calendar.YEAR); Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR, currentYear); Date currYearFirst = calendar.getTime(); return sdfDay.format(currYearFirst); } /** * 获取当年的最后一天 * * @param year * @return * @author zhangyue */ public static String getCurrYearLast() { Calendar currCal = Calendar.getInstance(); int currentYear = currCal.get(Calendar.YEAR); Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR, currentYear); calendar.roll(Calendar.DAY_OF_YEAR, -1); Date currYearLast = calendar.getTime(); return sdfDay.format(currYearLast); } /** * 获取当前季度第一天 * * @return * @author zhangyue */ public static String quarterStart() { Date dBegin = new Date(); Calendar calBegin = Calendar.getInstance(); calBegin.setTime(dBegin); int remainder = calBegin.get(Calendar.MONTH) % 3; int month = remainder != 0 ? calBegin.get(Calendar.MONTH) - remainder : calBegin.get(Calendar.MONTH); calBegin.set(Calendar.MONTH, month); calBegin.set(Calendar.DAY_OF_MONTH, calBegin.getActualMinimum(Calendar.DAY_OF_MONTH)); calBegin.setTime(calBegin.getTime()); return sdfDay.format(calBegin.getTime()); } /** * 获取当前季度最后一天 * * @return * @author zhangyue */ public static String quarterEnd() { Date dEnd = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(dEnd); int remainder = (calendar.get(Calendar.MONTH) + 1) % 3; int month = remainder != 0 ? calendar.get(Calendar.MONTH) + (3 - remainder) : calendar.get(Calendar.MONTH); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); calendar.setTime(calendar.getTime()); return sdfDay.format(calendar.getTime()); } /** * 获取本月第一天日期 * * @return */ public static String getMonthFirstDay() { Calendar thisMonthFirstDateCal = Calendar.getInstance(); thisMonthFirstDateCal.set(Calendar.DAY_OF_MONTH, 1); String thisMonthFirstTime = sdfDay.format(thisMonthFirstDateCal.getTime()); return thisMonthFirstTime; } /** * 获取本月最后一天日期 * * @return */ public static String getMonthEndDay() { Calendar thisMonthEndDateCal = Calendar.getInstance(); thisMonthEndDateCal.set(Calendar.DAY_OF_MONTH, thisMonthEndDateCal.getActualMaximum(Calendar.DAY_OF_MONTH)); String thisMonthEndTime = sdfDay.format(thisMonthEndDateCal.getTime()); return thisMonthEndTime; } public static boolean timeCalendar(Date nowTime, Date amBeginTime, Date amEndTime) { //设置当前时间 Calendar date = Calendar.getInstance(); date.setTime(nowTime); //设置开始时间 Calendar amBegin = Calendar.getInstance(); amBegin.setTime(amBeginTime);//上午开始时间 //设置结束时间 Calendar amEnd = Calendar.getInstance(); amEnd.setTime(amEndTime);//上午结束时间 //处于开始时间之后,和结束时间之前的判断 if ((date.after(amBegin) && date.before(amEnd))) { return true; } else { return false; } } /** * 获取本周的第一天 * * @return String **/ public static String getWeekStart() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式 Calendar cal = Calendar.getInstance(); // Calendar c = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, 0); // cal.setTime(time); // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了 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);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 /* * cal.add(Calendar.DATE, 6); * System.out.println("所在周星期日的日期:"+sdf.format(cal.getTime())); */ return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()) + " 00:00:00"; } /** * 获取本周的最后一天 * * @return String **/ public static String getWeekEnd() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式 Calendar cal = Calendar.getInstance(); // Calendar c = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, 0); // cal.setTime(time); // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了 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);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 cal.add(Calendar.DATE, 6); return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()) + " 23:59:59"; } /** * 判断时间格式 格式必须为“YYYY-MM-dd” * 2004-2-30 是无效的 * 2003-2-29 是无效的 * * @param sDate * @return */ public static boolean isLegalDate(String sDate) { int legalLen = 10; if ((sDate == null) || (sDate.length() != legalLen)) { return false; } DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); try { Date date = formatter.parse(sDate); return sDate.equals(formatter.format(date)); } catch (Exception e) { return false; } } /** * 时间比较 * * @param amBeginTime * @param amEndTime * @return */ public static boolean timeCompare(Date amBeginTime, Date amEndTime) { //设置开始时间 Calendar amBegin = Calendar.getInstance(); amBegin.setTime(amBeginTime);//上午开始时间 //设置结束时间 Calendar amEnd = Calendar.getInstance(); amEnd.setTime(amEndTime);//上午结束时间 //开始时间是否早于结束时间 if (amBegin.before(amEnd)) { return true; } else { return false; } } /** * 获取6个月内月份日期 * * @param flag 结果是否显示年份 * @return */ public static List getHalfYearMonth(boolean flag) { Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, -4); String before_six = c.get(Calendar.YEAR) + "-" + c.get(Calendar.MONTH);// 六个月前 List result = new ArrayList(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");// 格式化为年月 Calendar min = Calendar.getInstance(); Calendar max = Calendar.getInstance(); try { min.setTime(sdf.parse(before_six)); min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1); max.setTime(sdf.parse(sdf.format(new Date()))); //不含当前月 /* int month = max.get(Calendar.MONTH); max.set(Calendar.MONTH, month-1); */ } catch (ParseException e) { e.printStackTrace(); } max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2); Calendar curr = min; while (curr.before(max)) { if (flag) { result.add(sdf.format(curr.getTime())); } else { result.add(curr.get(Calendar.MONTH) + 1 + "月"); } curr.add(Calendar.MONTH, 1); } return result; } //根据当前日期获得最近n周的日期区间(不包含本周) public static String getFromToDate(SimpleDateFormat sdf, Date date, int n, int option, int k) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; int offset = 0 == option ? 1 - dayOfWeek : 7 - dayOfWeek; int amount = 0 == option ? offset - (n - 1 + k) * 7 : offset - k * 7; calendar.add(Calendar.DATE, amount); return sdf.format(calendar.getTime()); } public static SimpleDateFormat sdf() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } // 获取上周的开始时间 public static String getBeginDayOfLastWeek() { //上周日期 SimpleDateFormat sdf = sdf(); String beginDate = getFromToDate(sdf, new Date(), 1, 0, 1); Calendar calendar = Calendar.getInstance(); try { calendar.setTime(sdf.parse(beginDate)); } catch (Exception e) { e.printStackTrace(); } calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return sdf.format(calendar.getTime()); } // 获取上周的结束时间 public static String getEndDayOfLastWeek() { //上周日期 SimpleDateFormat sdf = sdf(); String endDate = getFromToDate(sdf, new Date(), 1, 1, 1); Calendar calendar = Calendar.getInstance(); try { calendar.setTime(sdf.parse(endDate)); } catch (Exception e) { e.printStackTrace(); } calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return sdf.format(calendar.getTime()); } // 获得上月第一天0点时间 public static String getTimesLastMonthmorning() { //上月日期 Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, -1); SimpleDateFormat sdf = sdf(); String gtimelast = sdf.format(c.getTime()); //上月 int lastMonthMaxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59); //按格式输出 SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01 00:00:00"); String gtime = sdf2.format(c.getTime()); //上月第一天 return gtime; } // 获得上月最后一天24点时间 public static String getTimesLastMonthnight() { //上月日期 Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, -1); SimpleDateFormat sdf = sdf(); String gtimelast = sdf.format(c.getTime()); //上月 int lastMonthMaxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59); //按格式输出 String gtime = sdf.format(c.getTime()); //上月最后一天 return gtime; } /** * 获取上一季度 开始和结束时间 * * @return */ public static String[] getLastQuarter() { SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); String[] range = new String[2]; Calendar startCalendar = Calendar.getInstance(); startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3 - 1) * 3); startCalendar.set(Calendar.DAY_OF_MONTH, 1); Date startDate = startCalendar.getTime(); range[0] = sdfd.format(startDate); Calendar endCalendar = Calendar.getInstance(); endCalendar.set(Calendar.MONTH, ((int) endCalendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2); endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH)); Date endDate = endCalendar.getTime(); range[1] = sdfd.format(endDate); return range; } /** * 获取当日期前/后某个月的所有日期 0 本月 负数 之前的月份 。正数 之后的月份 * * @param months * @return */ public static List getDayListOfMonth(Integer months) { List list = new ArrayList<>(); Calendar cal = Calendar.getInstance(); cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + months); int month = cal.get(Calendar.MONTH) + 1; String monthStr = month < 10 ? "0" + month : String.valueOf(month); int year = cal.get(Calendar.YEAR); int day = cal.getActualMaximum(Calendar.DATE); for (int i = 1; i <= day; i++) { String d = String.valueOf(i); if (i < 10) { d = "0" + d; } list.add(year + "-" + monthStr + "-" + d); } return list; } /** * 计算两个日期之间相差的天数 * * @param smdate 较小的时间 * @param bdate 较大的时间 * @return 相差天数 * @throws ParseException */ public static int daysBetween(Date smdate, Date bdate) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { smdate = sdf.parse(sdf.format(smdate)); bdate = sdf.parse(sdf.format(bdate)); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } Calendar cal = Calendar.getInstance(); cal.setTime(smdate); long time1 = cal.getTimeInMillis(); cal.setTime(bdate); long time2 = cal.getTimeInMillis(); long between_days = (time2 - time1) / (1000 * 3600 * 24); return Integer.parseInt(String.valueOf(between_days)); } /** * 字符串的日期格式的计算 */ public static int daysBetween(String smdate, String bdate) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); long time1 = 0; long time2 = 0; try { cal.setTime(sdf.parse(smdate)); time1 = cal.getTimeInMillis(); cal.setTime(sdf.parse(bdate)); time2 = cal.getTimeInMillis(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } long between_days = (time2 - time1) / (1000 * 3600 * 24); return Integer.parseInt(String.valueOf(between_days)); } /** * 得到几天前的时间 * * @param d * @param day * @return */ public static Date getDateBefore(Date d, int day) { Calendar now = Calendar.getInstance(); now.setTime(d); now.set(Calendar.DATE, now.get(Calendar.DATE) - day); return now.getTime(); } /** * 得到几天后的时间 * * @param d * @param day * @return */ public static Date getDateAfter(Date d, int day) { Calendar now = Calendar.getInstance(); now.setTime(d); now.set(Calendar.DATE, now.get(Calendar.DATE) + day - 1); return now.getTime(); } /** * 格式化日期 * * @return */ public static Date fomatDateByNian(String date) { DateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日"); try { return fmt.parse(date); } catch (ParseException e) { e.printStackTrace(); return null; } } public static void main(String[] args) { String afterHourDate = DateUtil.getAfterHourDate("12"); System.out.println(afterHourDate); } /** * 时间换算(秒级) */ public static String calculateDateSecond(String dateStr, int second) { Date date = str2Date(dateStr); if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.SECOND, second); SimpleDateFormat sdf = sdf(); return sdf.format(calendar.getTime()); } return ""; } /** * @Description: 返回从当前月份到指定月份的开始和结束时间 * {dateBegin=2023-07-01 00:00:00, month=2023-07, dateEnd=2023-07-31 23:59:59} * {dateBegin=2023-08-01 00:00:00, month=2023-08, dateEnd=2023-08-31 23:59:59} * {dateBegin=2023-09-01 00:00:00, month=2023-09, dateEnd=2023-09-30 23:59:59} * {dateBegin=2023-10-01 00:00:00, month=2023-10, dateEnd=2023-10-31 23:59:59} * {dateBegin=2023-11-01 00:00:00, month=2023-11, dateEnd=2023-11-30 23:59:59} * {dateBegin=2023-12-01 00:00:00, month=2023-12, dateEnd=2023-12-31 23:59:59} * {dateBegin=2024-01-01 00:00:00, month=2024-01, dateEnd=2024-01-31 23:59:59} * @Author: dearLin * @Date: 2024/1/29/029 14:12 * @Param: [] [] * @Return: java.util.List> */ public static List> generateTimeArraySevenMonth(int monthIndex) { List> timeArray = new ArrayList<>(); Calendar calendar = Calendar.getInstance(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (int i = monthIndex; i >= 0; i--) { Map monthInfo = new HashMap<>(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; String monthString = String.format(year + "-%02d", month); String firstDayOfMonth = String.format("%04d-%02d-01 00:00:00", year, month); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); String lastDayOfMonth = dateFormat.format(calendar.getTime()); monthInfo.put("month", monthString); monthInfo.put("dateBegin", firstDayOfMonth); monthInfo.put("dateEnd", lastDayOfMonth); timeArray.add(monthInfo); calendar.add(Calendar.MONTH, -1); // Go to the previous month } Collections.reverse(timeArray); return timeArray; } }