package com.icloud.server.utils.time;


import com.icloud.server.web.err.ServicerunException;

import javax.validation.constraints.NotNull;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @Author : yang_y_1.0.2
 * @Date : 2021/7/28 10:37 下午
 * @Version : 1.3.1
 * @Description :
 */
public class TimeUtilss {

    /**
     * 判断开始日期小于结束日期(帮助前端简写代码,不过这部分应该放在切面里,下次开发框架注意 )
     * @param start_time
     * @param end_time
     */
    public static void contrast_time(String start_time,String end_time){
        Date now=new Date();
        // 时间转换
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date start=now;
        try {
            start=sdf.parse(start_time);
        } catch (ParseException e) {
        }
        Date end=now;
        try {
            end=sdf.parse(end_time);
        } catch (ParseException e) {
        }
        if(end.before(start)){
            throw new ServicerunException("亲,开始时间应在结束时间之前,请重新输入时间");
        }
        if(end.before(now)){
            throw new ServicerunException("亲,结束时间不应在当前时间之前,请重新输入结束时间");
        }
    }
    public static void contrast_time2(String start_time,String end_time){
        Date now=new Date();
        // 时间转换
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date start=now;
        try {
            start=sdf.parse(start_time);
        } catch (ParseException e) {
        }
        Date end=now;
        try {
            end=sdf.parse(end_time);
        } catch (ParseException e) {
        }
        if(end.before(start)){
            throw new ServicerunException("亲,开始时间应在结束时间之前,请重新输入时间");
        }

    }
    @NotNull
//    @Contract(pure = true)
    public static String SimpleTime(@NotNull String time){
       return time.replaceAll("/","-");

    }

    public static Date StringToDate(String time) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = simpleDateFormat.parse(time);
       return date;

    }
    @NotNull
    public static String DatetoString(Date date){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
         String str = simpleDateFormat.format(date);
         return str;
    }
    @NotNull
    public static String DatetoStringSecond(Date date){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String str = simpleDateFormat.format(date);
        return str;
    }
    public static String gettoday_tostring(){
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy_MM_dd");
        String str = simpleDateFormat.format(date);
        return str;
    }
    public static Date toZ(Date date){
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        String str = df.format(date);
        Date parse = null;
        try {
            parse = df.parse(str);
        } catch (ParseException e) {
           parse=new Date();;
        }
        return parse;
    }


    /**
     * @Author yang
     * @Description
     * @Date 12:17 上午 2021/7/30
     * @Param [starttime, endtime]
     * @return java.util.List<java.lang.String>
     */
    //区间时间内的集合
    @NotNull
    public static List<String> gettimes(String starttime, String endtime) throws ParseException {
        String timeBegin=starttime;
        String timeEnd=endtime;

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date begin = sdf.parse(timeBegin);
        Date end = sdf.parse(timeEnd);
        List<Date> lDate = new ArrayList<Date>();
        lDate.add(begin);
        Calendar calBegin = Calendar.getInstance();
        // 使用给定的 Date 设置此 Calendar 的时间
        calBegin.setTime(begin);
        Calendar calEnd = Calendar.getInstance();
        // 使用给定的 Date 设置此 Calendar 的时间
        calEnd.setTime(end);
        // 测试此日期是否在指定日期之后
        while (end.after(calBegin.getTime()))
        {
            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
            lDate.add(calBegin.getTime());
        }
        List<String> timeStringList=new ArrayList<>();
        for (Date datePes :lDate){
            String format = sdf.format(datePes);
            timeStringList.add(format);
        }
        return timeStringList;

    }

    //比大小
    @NotNull
    public static Boolean community(@NotNull Date st, Date et){
        Boolean b=false;
        b=st.equals(et);
          b = st.before(et);


        return b;
    }
    public static String endtime(String time){

        return time+" 23:59:59";
    }


}
