1、当月有多少天
1)maven依赖
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency>
2)java方法
/** * 当月有多少天 * @param month 月份,eg:2021-09,2021-09-22 * @return */ public static int getTotalDayOfMonth(String month) { Date date = DateUtils.parseDate(month); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); SimpleDateFormat sdf = new SimpleDateFormat("dd"); String lastDay = sdf.format(calendar.getTime()); return Integer.parseInt(lastDay); }
2、获取两日期之间的月份以及每月对应的天数
1)结果示例
2)java代码
/** * 两日期之间的月份与天数 * @param dateStart YYYYMMDD * @param dateEnd YYYYMMDD dateEnd需大于dateStart * @return key: YYYYMM,val:天数 */ public static Map<String, Integer> betweenDay(String dateStart, String dateEnd) { Map<String, Integer> dataMap = MapUtil.newHashMap(); String firstMonth = getYearAndMonth(dateStart); int firstMonthDay = getDayInt(dateStart); int firstMonthTotalDay = getTotalDayOfMonth(dateStart); // 开始月,剩余多少天 int firstMonthBetweenDay = firstMonthTotalDay - firstMonthDay + 1; dataMap.put(firstMonth, firstMonthBetweenDay); // 最后一个月 String lastMonth = getYearAndMonth(dateEnd); // 最后一个月,间隔多少天 int lastMonthBetweenDay = getDayInt(dateEnd); dataMap.put(lastMonth, lastMonthBetweenDay); String tmpYear = null; String tmpMonth = null; int tmpMonthInt = 0; int tmpYearInt = 0; int monthTotal = 12; int daysNum = 0; for (String tmpDate = firstMonth; tmpDate.compareTo(lastMonth) < 0;) { tmpYear = getYear(tmpDate); tmpYearInt = Integer.parseInt(tmpYear); tmpMonth = getMonth(tmpDate); tmpMonthInt = Integer.parseInt(tmpMonth); tmpMonthInt++; if (tmpMonthInt > monthTotal) { tmpYearInt++; tmpMonthInt %= monthTotal; } tmpDate = tmpYearInt + formatMonth(tmpMonthInt); if (tmpDate.compareTo(lastMonth) >= 0) { break; } daysNum = getTotalDayOfMonth(tmpDate); dataMap.put(tmpDate, daysNum); } return dataMap; }
3)其他依赖
/** * 获取年 * @param date YYYYMMDD * @return YYYY */ public static String getYear(String date) { date = StringUtils.val(date).replaceAll("-", ""); if (date.length() > 3) { return date.substring(0, 4); } return date; } /** * 获取月 * @param date YYYYMMDD * @return MM */ public static String getMonth(String date) { date = StringUtils.val(date).replaceAll("-", ""); if (date.length() > 5) { return date.substring(4, 6); } return date; } /** * 获取日 * @param date YYYYMMDD * @return MM */ public static String getDay(String date) { date = StringUtils.val(date).replaceAll("-", ""); int length = date.length(); return date.substring(6, length); } /** * 获取日 * @param date YYYYMMDD * @return */ public static int getDayInt(String date) { return Integer.parseInt(getDay(date)); } /** * 获取年月 * @param date YYYYMMDD * @return YYYYMM */ public static String getYearAndMonth(String date) { return getYear(date) + getMonth(date); } /** * 格式化月 * @param month 1 * @return 01 */ public static String formatMonth(int month) { return String.format("%02d", month); }