包月服务的起止时间 到 包月月份的转换

线上的服务大部分都有包月计费的,对于包月计费来说,一般公司都有一个特别的规则来定义一个月的起止时间,比如从购买时间开始,满一个自然月后的第一个0:00作为服务的结束时间,在这个规则下,最少一个月有28天,大部分的月份都是30天,或31天,极端情况下,由于规则,会导致一个月有接近32天(你应该知道什么时间购买线上服务的时间是最合算的了吧?)。

对于服务器端,如何计算这个服务的起止时间,得出月份总数呢?
月份相减,计算天数,都会有误差,误差都是来自多个月份累积计算后的偏差。
所以,最好的办法,应该是从开始时间逐一累加月份,直到超过结尾时间。
上代码:

public static int getMonth(Date start, Date end)
{

    if (start.after(end)) 
    {
        Date t = start;

        start = end;

        end = t;

    }

    Calendar startCalendar = Calendar.getInstance();


    long endDataLong = end.getTime();


    int count = 0;


    while (true)


    {


    startCalendar.setTime(start);


    startCalendar.add(Calendar.MONTH, count+1);


    Date tmpData = startCalendar.getTime();


    long tmpDataLong = tmpData.getTime();

    if (tmpDataLong <= endDataLong)


    {


    count += 1;


    }else{

    break;

    }


    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值