【Java】工具 | 日期处理

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);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值