package com.app.util;

import org.joda.time.DateTime;
import org.joda.time.Interval;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.util.Date;

/**
 * 功能描述：时间工具类
 * 需要在pom.xml引入joda-time
 *
 * @Auther: 梁展鹏
 * @Date: 2018/7/24 11:38
 */
public class DateUtil {

    public static final String yyyyMMddHHmmss = "yyyyMMddHHmmss";
    public static final String yyyyMMdd_HHmmss = "yyyy-MM-dd HH:mm:ss";

    /**
     * 功能描述：
     *
     * @param date
     * @return
     */
    public static String format(Date date, String formatStr) {
        if (date == null) {
            return "";
        }

        DateTime dateTime = new DateTime(date);
        return dateTime.toString(formatStr);
    }

    /**
     * 功能描述：
     *
     * @param date
     * @return
     */
    public static Date format(String date) {
        DateTimeFormatter fmt = DateTimeFormat.forPattern(yyyyMMdd_HHmmss);
        return fmt.parseDateTime(date).toDate();
    }

    /**
     * 功能描述：
     *
     * @param date
     * @param pattern
     * @return
     */
    public static Date format(String date, String pattern) {
        DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);
        return fmt.parseDateTime(date).toDate();
    }

    /**
     * 功能描述：获取当前年份
     *
     * @return
     */
    public static Integer getYear() {
        DateTime dateTime = new DateTime();
        return Integer.parseInt(dateTime.toString("yyyy"));
    }

    /**
     * 功能描述：获取当前月份
     *
     * @return
     */
    public static Integer getMonth() {
        DateTime dateTime = new DateTime();
        return Integer.parseInt(dateTime.toString("mm"));
    }

    /**
     * 功能描述：判断时间是否在区间内
     *
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @param compareTime 比较时间
     * @return true在/false不在
     */
    public static Boolean between(Date startTime, Date endTime, Date compareTime) {
        Interval interval = new Interval(startTime.getTime(), endTime.getTime());
        return interval.contains(compareTime.getTime());
    }

    /**
     * 功能描述：[date]时间增加x分钟
     *
     * @param date
     * @param num
     * @return
     */
    public static Date plusMinutes(Date date, Integer num) {
        DateTime dateTime = new DateTime(date);
        return dateTime.plusMinutes(num).toDate();
    }

}
