计算日期工具类

package utils;

import org.apache.commons.lang.StringUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 〈计算日期工具类〉
 *
 * @author Barrett
 * @version 1.0.0
 * @time 2019/12/16
 */
public class DateUtil {

    private static final String DATE_FORMART = "yyyy-M-dd HH:mm:ss";

    public static void main(String[] args) {
        int second = 60;
        int day = 5;
        int addMonthLen = 2;
        String dateFormart1 = "yyyy-M-dd";
        String linkSymbol = "-";
    }

    /**
     * @Author Barrett
     * @Date 9:08 2020/1/11
     * @Description 获取字符串类型的当前时间
     */
    public static String getCurrentDateByYMDHMS() {
        Date dd = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String now = sdf.format(dd);
        return now;
    }

    /**
     * @Author Barrett
     * @Date 9:08 2020/1/11
     * @Description 获取当前时间的年月日
     */
    public static String getCurrentDateByYMD() {
        Date dd = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(dd);
    }

    /**
     * @Author Barrett
     * @Date 9:16 2020/1/11
     * @Description date转str
     */
    public static String dateToString(Date date) {
        SimpleDateFormat format = new SimpleDateFormat(DATE_FORMART);
        return format.format(date);
    }

    /**
     * @Author Barrett
     * @Date 8:45 2020/1/11
     * @Description str转date
     */
    public static Date stringToDate(String str) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-M-dd HH:mm:ss");
        Date date = null;
        try {
            date = format.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * @Author Barrett
     * @Date 19:03 2020/1/10
     * @Description 按照指定格式将字符串时间转成date
     */
    public static Date createDateByString(String dateString, String dateFormat) {
        Date date = null;
        DateFormat df = new SimpleDateFormat(dateFormat);
        try {
            date = df.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * @Author Barrett
     * @Date 18:26 2020/1/10
     * @Description 获取当前时间前N秒的时间,格式:yyyy-MM-dd HH:mm:ss
     */
    public static String getDateTimeBeforeSecond(int second) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar c = new GregorianCalendar();
        Date date = new Date();
        c.setTime(date);                 //设置参数时间
        c.add(Calendar.SECOND, -second);  //把日期往后增加SECOND 秒.整数往后推,负数往前移动
        date = c.getTime();                //这个时间就是日期往后推一天的结果
        return df.format(date);
    }

    /**
     * @Author Barrett
     * @Date 18:26 2020/1/10
     * @Description 获取当前时间前N天的时间,格式:Fri Jan 10 18:31:17 CST 2020
     */
    public static Date getDateBefore(Date d, int day) {
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.DATE, now.get(Calendar.DATE) - day);
        return now.getTime();
    }

    /**
     * Date add month
     */
    /**
     * @Author Barrett
     * @Date 18:26 2020/1/10
     * @Description 获取当前时间+N个月的时间,格式:2020-02-10 00:00:00
     */
    public static String getDateAddMonth(Date dd, int addMonthLen) {
        Calendar Cal = Calendar.getInstance();
        Cal.setTime(dd);
        Cal.add(Calendar.MONTH, addMonthLen);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
        return sdf.format(Cal.getTime());
    }

    /**
     * @Author Barrett
     * @Date 18:35 2020/1/10
     * @Description 格式化当前时间为00时,格式:2020-01-10 00:00:00
     */
    public static String getCurrentDateByHMSZeroZeroZero(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
        return sdf.format(date);
    }

    /**
     * @Author Barrett
     * @Date 16:20 2020/1/4
     * @Description 按照指定格式格式化当前时间
     * 例如 dateFormart = yyyy-MM-dd 00:59:99
     * 返回:2020-01-04 00:59:99
     */
    public static String getYMDHMbeforeMinute(Date date, int sMinute, String dateFormart) {
        Calendar now = Calendar.getInstance();
        now.setTime(date);
        now.set(Calendar.MINUTE, now.get(Calendar.MINUTE) - sMinute);
        Date dd = now.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormart);
        return sdf.format(dd);
    }

    /**
     * @Author Barrett
     * @Date 16:23 2020/1/4
     * @Description 计算当前时间为本周的第几天:从周日开始算到周六
     */
    public static int getWeekNum(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_WEEK);
    }

    /**
     * @Author Barrett
     * @Date 18:44 2020/1/10
     * @Description 按照指定格式计算两个时间相差几天
     * smdate:2020-01-04
     * bdate:2020-01-10
     * dateFormat:yyyy-MM-dd
     * 返回6
     */
    public static int countDaysBetween(String smdate, String bdate, String dateFormat) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        Calendar cal = Calendar.getInstance();
        long between_days = 0;
        try {
            cal.setTime(sdf.parse(smdate));
            long time1 = cal.getTimeInMillis();
            cal.setTime(sdf.parse(bdate));
            long time2 = cal.getTimeInMillis();
            between_days = (time2 - time1) / (1000 * 3600 * 24);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return Integer.parseInt(String.valueOf(between_days));
    }

    /**
     * @Author Barrett
     * @Date 18:46 2020/1/10
     * @Description 按指定格式获取当前时间的月末时间
     * dateFormat="yyyy-MM-dd HH:mm:ss"
     * 2020-01-31 18:48:46
     */
    public static String getSomeMonthLastDay(Date date, String dateFormat) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        int value = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        cal.set(Calendar.DAY_OF_MONTH, value);
        return new SimpleDateFormat(dateFormat).format(cal.getTime());
    }

    /**
     * @Author Barrett
     * @Date 18:46 2020/1/10
     * @Description 设置当前时间的月和日
     * linkSymbol="-"
     * monthAmount=7
     * newDay=8
     * 返回:2020-8-8
     */
    public static String getDynamicMonthYMD(Date date, String linkSymbol, int monthAmount, int newDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, newDay);
        calendar.add(Calendar.MONTH, monthAmount);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        return String.valueOf(year + linkSymbol + month + linkSymbol + day);
    }

    /**
     * @Author Barrett
     * @Date 18:46 2020/1/10
     * @Description 设置当前时间的月和日
     * linkSymbol="-"
     * newDay=8
     * 返回:2020-1-8
     */
    public static String getYMD(Date date, String linkSymbol, int newDay) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, newDay);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        return String.valueOf(year + linkSymbol + month + linkSymbol + day);
    }

    /**
     * @Author Barrett
     * @Date 18:46 2020/1/10
     * @Description 将当前时间按照linkSymbol进行连接
     * linkSymbol="-"
     * 2020-01-10
     */
    public static String getYMD(Date date, String linkSymbol) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        return String.valueOf(year + linkSymbol + (month < 10 ? "0" + month : month) + linkSymbol + (day < 10 ? "0" + day : day));
    }

    /**
     * @Author Barrett
     * @Date 8:45 2020/1/11
     * @Description 当前时间的前num天
     */
    public static Date subDay(Date date, int num) {
        Calendar time = Calendar.getInstance();
        num = -num;
        time.setTime(date);
        time.add(Calendar.DAY_OF_MONTH, num);
        return time.getTime();
    }

    /**
     * @Author Barrett
     * @Date 8:45 2020/1/11
     * @Description 获取当前时间+minutes分钟后的时间
     */
    public static Date getDateAfterMinute(Date date, int minutes) {
        Calendar now = Calendar.getInstance();
        now.setTime(date);
        now.set(Calendar.MINUTE, now.get(Calendar.MINUTE) + minutes);
        return now.getTime();
    }

    /**
     * @Author Barrett
     * @Date 8:53 2020/1/11
     * @Description 判断当前字符串在当前格式以内
     */
    public static boolean isDateType(String dateFormat, String dateString) {
        boolean isDateTypeFlag = true;
        DateFormat df = new SimpleDateFormat(dateFormat);
        try {
            df.parse(dateString);
        } catch (ParseException e) {
            isDateTypeFlag = false;
        }
        return isDateTypeFlag;
    }

    /**
     * @Author Barrett
     * @Date 8:53 2020/1/11
     * @Description 比较oldDate和newDate
     * oldDate < newDate == -1
     */
    public static int compareDates(Date oldDate, Date newDate) {
        Calendar oldCal = Calendar.getInstance();
        Calendar newCal = Calendar.getInstance();
        oldCal.setTime(oldDate);
        newCal.setTime(newDate);
        if (oldCal.equals(newCal)) {
            return 0;
        } else if (oldCal.before(newCal)) {
            return -1;
        } else {
            return 1;
        }
    }

    /**
     * @Author Barrett
     * @Date 8:53 2020/1/11
     * @Description 按照指定时间返回date类型时间
     */
    public static Date getDateByYMDHMS(int year, int month, int day, int hour, int minute, int second) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month - 1);
        calendar.set(Calendar.DAY_OF_MONTH, day);
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        return calendar.getTime();
    }

    /**
     * @Author Barrett
     * @Date 9:08 2020/1/11
     * @Description num天后的时间
     */
    public static Date addDay(Date date, int num) {
        Calendar time = Calendar.getInstance();
        time.setTime(date);
        time.add(Calendar.DAY_OF_MONTH, num);
        return time.getTime();
    }

    /**
     * @Author Barrett
     * @Date 9:08 2020/1/11
     * @Description 按照指定格式返回当前时间
     */
    public static String getDateString(String format) {
        String dateStr;
        if (StringUtils.isBlank(format)) {
            format = "yyyy-MM-dd-HH:mm:ss";
        }
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        dateStr = formatter.format(calendar.getTime());
        return dateStr;
    }

    /**
     * @Author Barrett
     * @Date 9:08 2020/1/11
     * @Description 传入时分秒返回当前时间
     */
    public static Date getDateByHMS(int hour, int minute, int secord) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, secord);
        return calendar.getTime();
    }

    /**
     * @Author Barrett
     * @Date 9:08 2020/1/11
     * @Description 返回当天的凌晨时间
     */
    public static String getCurrentDateByHMSZeroZeroZero() {
        Date dd = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
        return sdf.format(dd);
    }



    /**
     * @Author Barrett
     * @Date 10:53 2020/1/10
     * @Description 将字符串格式日期转成指定格式字符串返回
     */
    public static String parseToFormat(String payTime) {
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            payTime = format.format(format.parse(payTime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return payTime;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rsun04551

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值