package com.jiayue.insu.inclientqn.util;

import java.util.Calendar;

public class DateTimeUtils {

    /**
     * 得到整15分钟时间
     *
     * @return
     */
    public static long get15min(long time) {
        if (time % 900000L != 0) {
            time = time - time % 900000L;
        }
        return time;
    }

    /**
     * 得到整5分钟时间
     *
     * @param time
     * @return
     */
    public static long get5min(long time) {
        if (time % 300000L != 0) {
            time = time - time % 300000L;
        }
        return time;
    }


    public static long getDayStartTime(Long dateTime) {
        Calendar date = Calendar.getInstance();
        date.setTimeInMillis(dateTime);
        date.set(Calendar.HOUR_OF_DAY, 0);
        date.set(Calendar.MINUTE, 0);
        date.set(Calendar.SECOND, 0);
        date.set(Calendar.MILLISECOND, 0);
        return date.getTimeInMillis();
    }


    /**
     * 获取指定时间所在时刻的标记时间 <br>
     * 例如：dateTime:2018-10-22 16:44:00 momentLength: 15*60*1000 <br>
     * 当前标记signType:1 那么该时刻的标记时间为2018-10-22 16:30:00
     * 当后标记singType:2 那么该时刻的标记时间为2018-10-22 16:45:00
     *
     * @param dateTime     时间毫秒
     * @param signType     标记方式：1前标记 2后标记
     * @param momentLength 时刻长度，单位：毫秒
     * @return 指定时间所在时刻的标记时间，单位：毫秒
     */
    public static long getMomentTime(Long dateTime,int signType,Long momentLength) throws Exception {
        if (24 * 3600 * 1000L % momentLength != 0)
            throw new Exception("时刻长度非法，时刻长度需要能够被一天整除");
        int moment = getMoment(dateTime, momentLength);// 获取指定时间所在时刻数
        long differentTime = moment * momentLength;// 获取从0分0秒开始到现在的时间间隔，单位：毫秒
        long dayStartTime = getDayStartTime(dateTime);
        switch (signType) {
            case 2:
                return dayStartTime + differentTime;
            default:
                return dayStartTime + differentTime - momentLength;
        }
    }


    /**
     * 获取指定时间在当天所处于的时刻
     * 例如：dateTime：2018-10-22 16:44:00 momentLength: 15分钟，既 15*60*1000毫秒
     * 从0点0分开始计算，0点0分-0点15为第一个时刻，依次类推该时间的时刻数为67
     *
     * @param dateTime     时间毫秒
     * @param momentLength 时刻长度,单位毫秒
     * @return 时刻
     */
    public static int getMoment(Long dateTime,Long momentLength) {
        return (int) ((dateTime - getDayStartTime(dateTime)) / momentLength) + 1;
    }

}
