[java - 账单年月] 根据账单起始时间和账单周期,生成当前的账单年月(生成格式如:202308)

        业务需求:后台管理系统中,计费账单模块,用户的消费实时产生费用记录,每条费用需要需要根据账单的周期,标记一个账单归属月份(如:202306,表示为6月份的消费记录),当前账单周期结束后,系统扫描标记为上个周期的消费记录,对记录进行汇总,得出用户上个账单周期的账单.
        业务难点:①出现账单起始日期不为每月的1号情况;②出现账单周期不为一个月的情况,即大余1个月.
        以下提供一个工具方法,第一个参数账单起始年月日,格式如:2023-01-01,第二个参数账单周期月数,方法自动返回一个账单年月标识,如:202301,即表示2023年1月份账单.另外出现跨月情况,账单年月的月份以最后一个月所在月命名,如:账单周期2023-02-01至2023-03-31,账单标记为202303.
package wsd.wsdzncloud.easycharge.autils;

import java.time.LocalDate;
import java.util.Calendar;

/**
 * @Description: 生成账单年月
 * @Author: MeiCheng 2023/7/20 22:20
 */
public class BuildMonth {

    public static final String buildMonth(String startDate, int monthNum) {

        // 获取当前年月日
        Calendar date = Calendar.getInstance();
        LocalDate now = LocalDate.of(
                date.get(Calendar.YEAR), 
                date.get(Calendar.MONTH) + 1, 
                date.get(Calendar.DATE)
        );
        LocalDate start = LocalDate.of(
                Integer.parseInt(startDate.split("-")[0]), 
                Integer.parseInt(startDate.split("-")[1]), 
                Integer.parseInt(startDate.split("-")[2])
        );
        LocalDate end = start.plusMonths(monthNum).minusDays(1);
        // 账单月数
        int num = monthNum;
        while (now.isAfter(end)) {
            monthNum = monthNum + num;
            end = start.plusMonths(monthNum).minusDays(1);
        }
        String flag = end.getMonth().getValue() < 10 ? "0" : "";
        return end.getYear() + flag + end.getMonth().getValue();
    }

    public static void main(String[] args) {
        String buildMonth = buildMonth("2021-05-22", 1);
        System.out.println("buildMonth: " + buildMonth);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值