package com.ho.common.tools.util;

import cn.hutool.core.date.DateField;
import com.ho.common.tools.constant.CommonConstant;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 自定义时间工具类
 */
public class CustomTimeUtils {


    /**
     * 计算开始时间与结束时间差值，按照分钟分割
     * @param beginTime
     * @param endTime
     * @return
     */
    public static int getTimeDifferenceByMinute(String beginTime, String endTime){
        return getTimeDifference( beginTime, endTime, CommonConstant.SIXTY);
    }

    /**
     * 计算开始时间与结束时间差值，按照秒钟分割
     * @param beginTime
     * @param endTime
     * @return
     */
    public static int getTimeDifferenceBySecond(String beginTime, String endTime){
        return getTimeDifference( beginTime, endTime, CommonConstant.ONE);
    }

    /**
     * 获取采集粒度
     * @param beginTime
     * @param endTime
     * @param unit
     * @return
     */
    public static int getSamlRate(String beginTime, String endTime,final DateField unit ){
        int samlRate = 1,timeDifference=0;
        if(unit==DateField.SECOND){
            timeDifference = getTimeDifference( beginTime, endTime, CommonConstant.ONE);
        }else if(unit == DateField.MINUTE){
            timeDifference = getTimeDifference( beginTime, endTime, CommonConstant.SIXTY);
        }
        if (timeDifference <= 1441) {
            samlRate = 1;
        } else {
            double divisor = 1441;
            double flag = Math.ceil(timeDifference / divisor);        //向上取整计算
            samlRate = (int) flag;
        }
        return samlRate;
    }

    private static int getTimeDifference(String beginTime, String endTime,Integer num) {
        //一、时间减法可以用Calendar对象加法中，把第二个参数换成负数可以时间，这边就不列举了；使用第二种方式做时间减法
        //1、指定两个Date对象，业务中可以以参数的形式传递，不用new当前时间。
        int diffMinute = 0;
        try {
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date begin = dateFormat.parse(beginTime);
            Date end = dateFormat.parse(endTime);
            //2、时间戳相减
            long endDateTime = end.getTime();
            long beginDateTime = begin.getTime();
            BigDecimal result = new BigDecimal(endDateTime).subtract(new BigDecimal(beginDateTime));//毫秒
            //换算成分钟
            BigDecimal minute = result.divide(new BigDecimal(1000));//60秒等于1分钟
            BigDecimal divide = minute.divide(new BigDecimal(num), 1, BigDecimal.ROUND_UP);
            diffMinute = divide.intValue();
        } catch (Exception e) {

        }
        return diffMinute;
    }


}
